使用大型TObjectList并释放未使用的部分

pro*_*tor 8 delphi tobjectlist

我使用TObjectList(Delphi 2007)存储大量数据 - 我希望有大约30万个元素甚至更多.但是,当创建列表时,它的默认大小设置为仅存储四个元素,如果一个尝试添加第五个元素则为8,如果一个尝试添加第九个元素则为16,依此类推.数字可能已关闭,但我认为工作正确.这样做的问题是必须将所有元素从内存的释放部分复制到新扩展列表迁移的新内存块.我想设置一个特定的初始大小并释放(或撤消内存的保留,因为保留和分配不是相同的事情)列表已分配/保留的任何未使用的空间.这可能不是很多代码,但我认为应该以问答形式对这个问题进行永久,可靠的引用.

Ken*_*ite 12

设置所需Capacity元素的最大数量,填充列表,然后设置为Capacity实际使用的元素(可选).这避免了所有分配/移动/分配/移动的东西.

MyList.Capacity := 300000;
// Add 280000 items here

// Optionally, reduce the capacity. It's not important to do so unless
//  you end up with a lot of unused items.
MyList.Capacity := MyList.Count;
Run Code Online (Sandbox Code Playgroud)