【问题标题】:Using a large TObjectList and deallocating the unused part使用大型 TObjectList 并释放未使用的部分
【发布时间】:2012-10-17 21:14:11
【问题描述】:

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

【问题讨论】:

    标签: delphi tobjectlist


    【解决方案1】:

    将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;
    

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2011-10-28
      • 2020-06-26
      • 2023-01-21
      • 2017-09-18
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多