У меня есть приложение, которое загружает 170 файлов (скажем, текстовых файлов) с диска в отдельные объекты и постоянно хранится в памяти.Память выделяется один раз, когда я загружаю эти файлы с диска.Таким образом, нет фрагментации памяти.Я также использую FastMM, чтобы убедиться, что мои приложения никогда не теряют память.
Приложение сравнивает все эти файлы друг с другом, чтобы найти сходства.Слишком упрощенно можно сказать, что мы сравниваем текстовые строки, но алгоритм более сложный, так как я должен допустить некоторые различия между строками.Каждый файл составляет около 300 КБ.Загруженный в память (объект, который его удерживает) занимает около 0,4 МБ ОЗУ.Итак, запущенное приложение занимает около 60 МБ или ОЗУ (рабочий набор).Обрабатывает данные около 15 минут.Дело в том, что он генерирует более 40 миллионов ошибок страниц.
Почему?У меня около 2 ГБ свободной оперативной памяти.Из того, что я знаю, страница сбоев идет медленно.Насколько они тормозят мою программу?Как я могу оптимизировать программу, чтобы уменьшить количество ошибок на странице?Я думаю, это как-то связано с локальностью данных.Кто-нибудь знает некоторые примеры алгоритмов для этого (Delphi)?
Обновление:
Но, глядя на количество сбоев страниц (ни одно другое приложение в диспетчере задач не близко, даже далеко), я думаючто я могу увеличить скорость своего приложения, если мне удастся оптимизировать структуру памяти (уменьшить количество ошибок на странице).
Delphi 7, Win 7 32-битная, ОЗУ 4 ГБ (3 ГБ видимые, 2 ГБ свободные).