.net快速内存分配

时间:2011-04-12 22:06:16

标签: .net memory memory-management dynamic-memory-allocation

在我的应用程序中,有些情况是相对较小的对象,(最多50个字节),例如在执行程序期间,必须经常创建和释放(通过GC)用于记录目的的消息类。所以我担心动态分配这些对象的开销。正如本question中所述,本机代码有一些可用的快速内存分配器 在.Net中是否存在快速内存分配的概念,还是.Net需要快速内存分配?如果没有什么可以用来加速这种实施? (也许某种预先分配的对象池。)我应该担心开销吗?

3 个答案:

答案 0 :(得分:3)

你不应该担心开销,除非你的探查器为你提供硬数据来支持这种担忧。

我认为你可能能够使用unsafe代码实现一个分配器,但是它的吸引力和努力值得吗?你必须要知道。

答案 1 :(得分:2)

由于它是一个设计良好的内存分配器,因此只有一种方式来分配垃圾收集内存。 非常快,分配只需要调整指针。比本机代码必须使用的分配器快得多。这项工作要困难得多,一旦分配了本机内存,它就不能再被移动了。这使得编写不受碎片影响的分配器变得困难。反措施增加了开销。它不是GC堆中的问题,它可以压缩。

您无法提高GC分配器的速度。

答案 2 :(得分:1)

如果物体很小而且寿命很短,我不会太担心。它们很可能是通过Gen0 GC收集的,这通常相对便宜。

你可以实现一个池,但根据我的经验,这只有在你分配大对象时才需要(如果我记得正确的对象放在大对象堆上,如果它们大于80kB)或非常< / em>许多(每秒数百万)对象。

所以首先要正常实施。只有当您发现您的程序在GC中花费了大量时间时,您才应该担心您的分配。很可能你正在考虑过早优化。