我正在使用 Red Gates ANTS 内存分析器来调试内存泄漏。它不断警告我:
内存碎片可能会导致
.NET 预留了过多的可用内存。
or
内存碎片影响可分配的最大对象的大小
因为我有强迫症,这个问题必须解决。
有哪些标准编码实践有助于避免内存碎片。
您可以通过一些 .NET 方法对其进行碎片整理吗?有帮助吗?
你知道,我有点怀疑这里的内存分析器。 .NET 中的内存管理系统实际上尝试通过移动内存来对堆进行碎片整理(这就是为什么您需要固定内存以使其与外部 DLL 共享)。
在较长时间内进行的大量内存分配容易产生更多碎片。虽然小的临时(短)内存请求不太可能导致 .NET 中的碎片。
这里还有一些值得思考的事情。在 .NET 当前的 GC 中,分配的内存在时间上接近,通常在空间上间隔也很近。这与碎片化相反。也就是说,您应该按照您想要访问的方式分配内存。
它只是托管代码还是包含 P/Invoke、非托管内存 (Marshal.AllocHGlobal) 或 GCHandle.Alloc(obj, GCHandleType.Pinned) 等内容?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)