Какой способ распределения использовать для приложения регистрации большого объема? - PullRequest
5 голосов
/ 12 сентября 2011

Я разрабатываю регистратор / сниффер, используя Delphi. Во время работы я получаю огромное количество данных, которые могут накапливаться во время стрессовых операций примерно до 3 ГБ данных. На некоторых компьютерах, когда мы достигаем этих уровней, приложение перестает работать и иногда выдает исключения.

В настоящее время я использую функцию GetMem для выделения указателя на каждое сообщение.

Есть ли лучший способ выделить память, чтобы я мог свести к минимуму вероятность сбоя? Имейте в виду, что я не могу ограничить размер жестким ограничением.

Что вы думаете об использовании HeapAlloc, VirtualAlloc или, возможно, даже сопоставленных файлов? Что будет лучше?

Спасибо.

1 Ответ

5 голосов
/ 12 сентября 2011

Ваша фундаментальная проблема - ограничение жесткого адресного пространства 4 ГБ для 32-битных процессов.Поскольку вы сталкиваетесь с проблемами на 3 ГБ, я могу только предполагать, что вы используете /LARGEADDRESSAWARE, работающий на 64-битной Windows или 32-битной Windows с переключателем загрузки / 3GB.

Я думаю, у вас есть несколько вариантов, включая, ноне ограничивается следующим:

  1. Используйте меньше памяти.Возможно, вы можете обрабатывать небольшими порциями или помещать часть памяти на диск.
  2. Используйте 64-битный Delphi (только что выпущенный) или FreePascal.Это освобождает вас от ограничения адресного пространства, но ограничивает вас 64-битными версиями Windows.
  3. Используйте файлы с отображением в памяти.На машине с большим объемом памяти это способ получить доступ к кешу памяти ОС.Файлы, отображаемые в память, не для слабонервных.

Я не могу дать окончательного решения относительно решения, поскольку не знаю вашу архитектуру, но по своему опыту уменьшение объема памяти часто является лучшим решением..

Использование другого распределителя, вероятно, мало что изменит.Да, это правда, что есть распределители с низкой фрагментацией, но они определенно не решат вашу проблему.Все, что они могли сделать, это сделать его чуть менее вероятным.

...