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

是否值得缓存Delphi'创建的对象;什么是内存管理器?,delphi,memory-management,Delphi,Memory Management,我有一个可以创建和销毁数千个对象的应用程序。缓存和重用对象是否值得,或者Delphi的内存管理器是否足够快,以至于多次创建和销毁对象并没有那么大的开销(与跟踪缓存相对),当我说值得时,当然我在寻找性能提升。只有探查器会告诉你。在一个紧密的循环中尝试这两种方法,看看结果如何:-)我认为这取决于对象在创建和销毁过程中执行的代码。TObject.Create和TObject.Destroy的影响通常是可以忽略的,并且很容易被缓存开销所抵消 你也应该考虑到一个对象的状态在刚被创建后重新使用时会有所不同。

我有一个可以创建和销毁数千个对象的应用程序。缓存和重用对象是否值得,或者Delphi的内存管理器是否足够快,以至于多次创建和销毁对象并没有那么大的开销(与跟踪缓存相对),当我说值得时,当然我在寻找性能提升。

只有探查器会告诉你。在一个紧密的循环中尝试这两种方法,看看结果如何:-)

我认为这取决于对象在创建和销毁过程中执行的代码。TObject.Create和TObject.Destroy的影响通常是可以忽略的,并且很容易被缓存开销所抵消


你也应该考虑到一个对象的状态在刚被创建后重新使用时会有所不同。

< P>
如果当前的性能足够,那么您就没有太多的机会尝试提高它。但是,如果您有性能问题,那么一些缓存(或者其他策略)可能会有所帮助。

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

根据最近的测试,如果对象创建不贵的话(也就是说,不依赖于外部资源——访问文件、注册表、数据库……)那么你将很难打败Delphi的内存管理器。它就是这么快


如果您使用的是最新的Delphi,这一点当然适用——如果不是,请从中获取FastMM4并使用它,而不是Delphi的内部MM。

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


或者换一种说法,测量并找出答案。如果你不是在测量,你不是在工程,只是在猜测。

你必须用真实世界的负载来测量,才能回答这样的问题。根据这些对象中包含的资源、任何资源争用、建设成本、大小等,答案可能会让你感到惊讶,甚至可能根据负载的性质而改变


如果不进行测量,通常很难确定您的绩效问题会在哪里。

我听到了您的话。我只是想知道是否值得考虑在这一领域进行评测!我知道您是对的。我只是想知道是否值得在这一领域进行基准测试,或者集中精力在D2009编译器的新特性方面做得很好,顺便说一句!!