2012-10-17 25 views
8

我正在使用TObjectList(Delphi 2007)来存储大量数据 - 我预计会有大约30万个元素甚至更多。但是,创建列表时,默认大小设置为只存储四个元素,然后八个(如果尝试添加第五个元素),然后是十六个(如果尝试添加第九个元素等等)。这些数字可能是关闭的,但我认为这些工作是正确的。问题在于所有元素都必须从内存的释放部分复制到新扩展列表迁移到的新内存块。我想设置一个特定的初始大小,并释放(或撤销内存预留,因为预留和分配不是同一件事情)列表已分配/保留的任何未使用的空间。 这可能不是很多的代码,但我认为应该有一个永久的,坚实的问题形式的问题和答案。使用一个大的TObjectList并释放未使用的部分

回答

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; 
+0

这工作得很好,谢谢。 – programstinator

相关问题