我的项目(在Delphi 6上运行!)需要一个内存分配列表(TMemoryAllocation),它存储在一个对象中,该对象还包含有关分配大小(FSize)的信息,以及分配是否正在使用或免费(保险丝)。我基本上将它用作GarbageCollector,并且一直保持我的应用程序一直分配/释放内存(并且需要大量的分配/解除分配)。
每当我的项目需要分配时,它会查找列表以找到符合所需大小的免费分配。为了达到这个目的,我使用了一个简单的for循环:
for I := 0 to FAllocationList.Count - 1 do
begin
if MemoryAllocation.FUsed and (MemoryAllocation.FSize = Size) then
...
我的应用程序运行的时间越长,这个列表会增加到几千个项目,并且当我非常频繁地运行它(每秒几次)时它会大大减慢。
我正在努力寻找加速此解决方案的方法。我想过按分配大小排序TList。如果我这样做,我应该使用一些智能的方式来访问列表,以获得每次通话时所需的特定大小。 有一些简单的方法吗?
我想到的另一种方式是拥有两个TList。一个用于未使用和一个已用分配。这意味着我必须从一个列表中提取TList.Items并一直添加到另一个列表中。我仍然需要使用for循环来浏览(现在)较小的列表。 这是正确的方法吗?
其他建议非常欢迎!
答案 0 :(得分:5)
您有几种可能性:
如果您的应用程序对内存分配非常敏感,可能会有一些关于重新发明轮子的反馈:
这绝对不是那么简单,因此您可能希望先查看一些现有代码,或者只依赖现有库。我认为您不必在应用程序中对此内存分配进行编码,除非FastMM4对您来说不够快,我对此非常怀疑,因为这是一段很棒的代码!