Как избежать нехватки памяти при растущем TDictionary?

TDictionary использует внутренний массив, который удваивается, если он заполнен:

newCap := Length(FItems) * 2;
if newCap = 0 then
  newCap := 4;
Rehash(newCap);

Это хорошо работает со средним количеством элементов, но если доходит до верхний предел это очень неудачно, потому что он может вызвать исключение EOutOfMemory , даже если почти половина памяти все еще доступна.

Есть ли способ повлиять на это поведение? Как другие классы коллекций справляются с этим сценарием?

8
задан Rob Kennedy 2 December 2011 в 15:48
поделиться