Советы по Delphi


Распределение памяти TstringList


Я создаю объект TStringList и добавляю 10,000 десятибайтовых строк по 1000 строк за раз, после чего, с помощью функции GetHeapStatus, получаю информацию о куче. Ниже представляю вам результаты: число TotalAddrSpace TotalAllocated 0 1,048,576 11,268 1,000 1,048,576 40,848 2,000 2,097,152 69,344 3,000 3,145,728 97,888 4,000 4,194,304 126,296 5,000 6,291,456 154,868 6,000 9,437,184 183,268 7,000 12,582,912 211,828 8,000 14,680,064 240,248 9,000 18,874,368 268,800 10,000 23,068,672 297,208 Я гляжу что Delphi 2.0 для моих данных размером 300Кб выделила памяти аж 23Мб! Ну и кому это понравится? У меня есть программа, заполняющая TStringGrid, и она работает вдвое медленне чем в версии Delphi 1.0! Похоже, что вся эта заторможенность вызвана чрезмерным распределением памяти.

- Mark Ford

Я уже упоминал об этом. Проблема заключается в том, что каждый раз списку строк необходимо сбрасывать свое состояние (через каждые шестнадцать добавленных строк), список строк копируется из существующей области в новую, но старая область при этом освобождается некорректно. Я уже послал соответствующий рапорт в Borland.

-Steve Schafer [000916]



Содержание раздела