Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有类似SmartHeap的托管.NET代码解决方案?_C#_.net - Fatal编程技术网

C# 是否有类似SmartHeap的托管.NET代码解决方案?

C# 是否有类似SmartHeap的托管.NET代码解决方案?,c#,.net,C#,.net,对于优化内存操作和托管C代码.net,是否有类似于SmartHeap的解决方案 NET运行时负责所有内存操作。没有办法重写内存分配器,因为这样做会极大地改变GC的操作方式,特别是考虑到它的紧凑性 这就是说,这可能在.NET中带来的好处要小得多,因为在.NET世界中对象分配要便宜得多,因为内存池已经由CLR管理,分配新对象并不一定会触发新内存—通常只是清除并使用已分配的内存。NET运行时负责所有内存操作。没有办法重写内存分配器,因为这样做会极大地改变GC的操作方式,特别是考虑到它的紧凑性 话虽如此

对于优化内存操作和托管C代码.net,是否有类似于SmartHeap的解决方案


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


这就是说,这可能在.NET中带来的好处要小得多,因为在.NET世界中对象分配要便宜得多,因为内存池已经由CLR管理,分配新对象并不一定会触发新内存—通常只是清除并使用已分配的内存。

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


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

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

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

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


你可以打开它,看看它是否有明显的不同。请注意,它确实会消耗更多内存,在交互式UI类程序中,垃圾收集暂停可能很明显。后台收集不适用于服务器GC,它将在SmartHeap声名鹊起的15年前变得可用,因为它可以避免对堆锁的争夺。托管程序的堆与本机程序使用的堆没有太多共同之处,像SmartHeap这样的产品肯定没有任何用处

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

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

你可以打开它,看看它是否有明显的不同。请注意,它确实会消耗更多内存,在交互式UI类程序中,垃圾收集暂停可能很明显。后台集合不可用于服务器GC,它将在中可用