8

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

4

1 回答 1

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;
于 2012-10-17T12:24:09.403 回答