SmartHeap是否像Managed .NET Code的解决方案一样?

时间:2012-06-13 18:07:33

标签: c# .net

对于托管C#代码(.net),是否存在类似于SmartHeap的解决方案,以优化内存操作?

http://www.microquill.com/smartheap/index.html

2 个答案:

答案 0 :(得分:3)

.NET运行时负责所有内存操作。没有办法覆盖内存分配器,因为这样做会极大地改变GC的运行方式,特别是考虑到它是紧凑的。

话虽如此,这可能会在.NET中提供更少的好处,因为.NET世界中的对象分配要便宜得多,因为内存池已经由CLR“管理”,并且分配新对象不会必然会触发新内存(通常只是清除并使用已分配的内存)。

答案 1 :(得分:2)

SmartHeap声名鹊起,我当然记得15年前,它可以避免争用堆锁。托管程序的堆与本机程序使用的堆没有多少共同之处,像SmartHeap这样的产品肯定没有任何用处。

但它确实有同样的锁定。它不像在本机代码中那么多问题,来自垃圾收集堆的堆分配非常快,它只是一个指针增量。本机堆分配器必须做更多工作以避免碎片。因此,两个或多个托管线程在完全同时分配的可能性并不大。

然而,由于完全不同的原因,.NET CLR 支持多个堆。在Windows的服务器版本上自动启用该功能。您可以使用app.exe.config文件中的<gcServer> element有意加强它。副作用是锁争用将非常低,真正的意图是同时在多个线程上收集垃圾。

您可以打开它,看看它是否有任何明显的区别。请注意,它确实消耗更多内存,并且垃圾收集暂停可能会在交互式UI类型的程序中显而易见。后台集合不适用于服务器GC,它将在.NET 4.5

中提供