是否有类似智能堆的托管.NET代码解决方案

本文关键字:NET 代码 解决方案 智能 是否 | 更新日期: 2023-09-27 18:37:17

是否有任何类似于 SmartHeap 的解决方案,用于优化内存操作和托管 C# 代码 (.net)?

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

是否有类似智能堆的托管.NET代码解决方案

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

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

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

但它确实有同样的锁。 它不像本机代码那样是一个问题,垃圾回收堆的堆分配非常快,它只是一个指针增量。 本机堆分配器必须执行更多工作以避免碎片。 因此,两个或多个托管线程在同一时间分配的几率并不大。

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

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