是否值得缓存Delphi内存管理器创建的对象?

时间:2008-11-02 21:41:37

标签: delphi memory-management

我有一个创建并销毁数千个对象的应用程序。值得缓存和重用对象,还是Delphi的内存管理器足够快,多次创建和销毁对象并不是一个很大的开销(而不是跟踪缓存)当我说值得,当然我在寻找为了提升性能。

7 个答案:

答案 0 :(得分:17)

从最近的测试 - 如果对象创建不昂贵(即不依赖于外部资源 - 访问文件,注册表,数据库......)那么你将很难击败Delphi的内存管理器。就是那么快。

如果您使用的是最近的Delphi,那当然有用 - 如果没有,请从SourceForge获取FastMM4并使用它代替Delphi的内部MM。

答案 1 :(得分:15)

内存分配只是您想要缓存的一小部分。您需要知道构造语义上有效的对象的全部成本,并将其与从缓存中检索项目的成本进行比较,而不仅仅是微基准测试:缓存效果(CPU缓存,即)可能会改变运行时动态在一个真实的实时运行应用程序中。

或者用另一种方式,测量它并找出答案。如果你没有测量,你就不是工程师,只是猜测。

答案 2 :(得分:6)

只有个人会告诉你。在紧密循环中尝试这两种方法,看看最重要的是: - )

答案 3 :(得分:3)

您必须使用实际负载来衡量这样的问题。根据这些对象中的资源,任何资源争用,建筑成本,大小等,答案可能会让您感到惊讶,甚至可能会根据负载的性质而改变。

如果不进行衡量,通常很难确定您的绩效问题。

答案 4 :(得分:1)

我认为这取决于您的对象在创建和销毁期间将执行的代码。 TObject.Create和TObject.Destroy的影响通常是可以忽略的,并且可能很容易因缓存开销而超出。

您还应该考虑在刚刚创建后重新使用对象时状态可能会有所不同。

答案 5 :(得分:0)

通常唯一的方法就是尝试它。

如果目前的表现足够,那么你没有太多的电话尝试增加它。但是,如果您遇到性能问题,那么一些缓存(或者其他一些策略)可能会有所帮助。

答案 6 :(得分:0)

您还需要一些关于特定对象(实例)使用频率的统计信息。如果您定期引用同一组数据,那么缓存可能会真正提高性能,但如果访问分布在所有可能的对象上,那么缓存未命中率可能太高而无法实现。