Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

выделение большого объема памяти [D5, WinXP]


Страницы:   1 2 3

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...


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо