Мой проект (запущенный на Delphi 6!) Требует список распределений памяти (TMemoryAllocation), который я храню в объекте, который также содержит информацию о размере выделения (FSize) и о том, используется ли выделение или свободно(плавленый).Я использую это в основном как GarbageCollector и как способ постоянно использовать свое приложение для выделения / освобождения памяти (и для этого требуется много выделений / освобождений).
Всякий раз, когда моему проекту требуется выделение, он просматривает списокнайти бесплатное распределение, которое соответствует требуемому размеру.Чтобы добиться этого, я использую простой цикл for:
for I := 0 to FAllocationList.Count - 1 do
begin
if MemoryAllocation.FUsed and (MemoryAllocation.FSize = Size) then
...
Чем дольше работает мое приложение, этот список увеличивается до нескольких тысяч элементов, и он значительно замедляется, поскольку я запускаю его очень часто (несколько раз в секунду).
Я пытаюсь найти способ ускорить это решение.Я думал о сортировке TList по размеру выделения.Если я сделаю это, я должен использовать какой-то разумный способ доступа к списку для нужного размера при каждом вызове. Есть ли какой-нибудь простой способ сделать это?
Другой способ, о котором я думал, - это иметь два TList.Один для Неиспользованного и один из Используемых распределений.Это означало бы, что мне придется извлекать TList.Items из одного списка и постоянно добавлять в другой.И я все еще должен был бы использовать цикл for, чтобы пройти (теперь) меньший список. Это был бы правильный путь?
Другие предложения ОЧЕНЬ также приветствуются!