![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
выделение большого объема памяти [D5, WinXP]
Unknown user © (2007-10-10 12:21:00)как выделить максимально доступный процессу объем памяти? и какие это значения для WinXP? зависит ли это число от объема физической памяти или система руководствуется более тонкими материями при определении значения макс. объема доступной процессу памяти :)
Ping (2007-10-10 14:37:00) [21]Более того, если на компьютере даже и 2 ГБ ОЗУ, все равно система не даст процессу все 2 ГБ, даже если и очень просить. То есть, часть данных будут скинуты в своп, что, в свою очередь, значительно уменьшит быстродействие. Так что - определяй оптимальный, как с точки зрения системы, так и с точки зрения алгоритма размер буфера в памяти - и вперед!
Unknown user (2007-10-10 14:34:00) [22]> только не heapalloc but VirtualAlloc
поясните чем VirtualAlloc лучше в моем случае, плиз.
Leonid Troyanovsky (2007-10-10 14:30:00) [23]
> Unknown user © (10.10.07 14:25) [20]
> данные считываются последовательными блоками с одного файла
> и после обработки в памяти записываются в другой файл. что
Никакой mmf здесь не требуется.
Выбрать размеры буферов кратными размеру кластера,
только не heapalloc but VirtualAlloc(Ex)
--
Regards, LVT.
Ping (2007-10-10 14:28:00) [24]Unknown user © (10.10.07 14:25) [20]
Для такой работы, в общем случае, и 64 КБ достаточно.
Unknown user (2007-10-10 14:25:00) [25]> обработка данных линейная? однопроходная?
данные считываются последовательными блоками с одного файла и после обработки в памяти записываются в другой файл. что происходит при обработке, это отдельный разговор, в данном контексте это не суть важно. (проще говоря, не знаю :) )
homm (2007-10-10 14:15:00) [26]> [17] Unknown user © (10.10.07 14:01)
> насколько эффективным в этом случае будет приложение с точки
> зрения уменьшения времени затрачиваемого на работу с диском.
Ненасколько. Рпботать только удобнее.
Еше раз помедитируй над [11], и ксатаи, ответь обработка данных линейная? однопроходная?
Leonid Troyanovsky (2007-10-10 14:04:00) [27]
> Unknown user © (10.10.07 14:01) [17]
> эффективным в этом случае будет приложение с точки зрения
> уменьшения времени затрачиваемого на работу с диском
Зависит от того, как организована работа с данными.
--
Regards, LVT.
Unknown user (2007-10-10 14:01:00) [28]>Как выделяешь память?
h:=GetProcessHeap;
size1:=...;
mem:=heapalloc(h,0,size1);
size2:=HeapSize(h,0,mem);
>А использовать MMF разве не рекомендация?
при использовании memory-mapped files система сама организует кеш и считывает в оп память нужные фрагменты с диска? насколько эффективным в этом случае будет приложение с точки зрения уменьшения времени затрачиваемого на работу с диском.
homm (2007-10-10 13:35:00) [29]> [13] Unknown user © (10.10.07 13:22)
> несколько непонятно поведение системы: на двух машинах по
> 2 Гб RAM, одна версия ОС, но на первой выделяемый предел
> около 1400 Мб, на второй около 700 Мб.
когда 512 мб оп было, ради интереса тестировал.
Выделялось 2052, если не изменяет память, метра. Естественно это в диспетчере задач. Пользовательский размер был хоть и ментше, но не существенно, никак не меньше 1,5 гб.
Так что ищи проблему в коде. Как выделяешь память?
Сергей М. (2007-10-10 13:27:00) [30]
> как можно увеличить объем выделяемой процессу памяти?
Выгрузив из АП процесса "лишние" модули.
> конкретных рекомендаций я так и не услышал
А использовать MMF разве не рекомендация ?
Unknown user (2007-10-10 13:23:00) [31]>Но выше 2Гб все равно не прыгнешь
выше и не пытаюсь :)
Unknown user (2007-10-10 13:22:00) [32]конкретных рекомендаций я так и не услышал :( кроме сменить винду на 64-bit версию.
вопрос такой: как можно увеличить объем выделяемой процессу памяти?
несколько непонятно поведение системы: на двух машинах по 2 Гб RAM, одна версия ОС, но на первой выделяемый предел около 1400 Мб, на второй около 700 Мб.
а кто я есть в данном вопросе не столь важно :)
Сергей М. (2007-10-10 13:20:00) [33]
> memory-mapped files помогут это сделать?
Помогут.
Но выше 2Гб все равно не прыгнешь.
homm (2007-10-10 13:17:00) [34]Единственный способ минимизмровать обращениек диску, при ограниченном объеме памяти — сделать обработку линейной и по возможности однопроходной.
Unknown user (2007-10-10 13:09:00) [35]>а где эти массивы?
эти массивы в файлах на диске. цель - минимизировать обращения к диску. memory-mapped files помогут это сделать?
Сергей М. (2007-10-10 13:08:00) [36]
> наш программист хочет именно все и сразу
А ты-то кто ?)
Разве не программист ? Или того "программиста" зовут О.И.С.Б.М.Бендер-Бей ?)
Понимаешь ли, heap - "рудиментарный орган", доставшийся в наследство от Win16, где вирт.память была сегментированной, а не плоской.
В Win32 все вызовы Global/Local/HeapAlloc сводятся, в конечном итоге, к вызову VirtualAlloc, т.е. выделению в ВАП процесса региона из смежных страниц фиксированного размера (4K)
ВАП процесса в Win32 имеет фиксированный размер, равный 4Гб. Из них прикладному коду доступны менее 2Гб.
homm (2007-10-10 13:08:00) [37]Поставь 64-бит винду.
Unknown user (2007-10-10 13:00:00) [38]>Обработка обработке рознь.
>Поясни ..
Согласен. Нерационально. Я бы так не делал. Но наш программист хочет именно все и сразу. Так что с моей стороны присутствует только теоретический интерес.
Кто-то подскажет как выжать максимум? Возможно уже и не с помощью кодинга, а настройкой системы.
Сергей М. (2007-10-10 12:55:00) [39]
> Unknown user © (10.10.07 12:47) [4]
Ликбез здесь:
http://www.biblioteka.net.ru/data/c/msvc1/THEORY/HTM/glava23.html
> обработка больших массивов
Обработка обработке рознь.
Поясни ..
clickmaker (2007-10-10 12:55:00) [40]а где эти массивы?
в конце-концов, есть же VirtualAlloc, memory-mapped files...