gpt4 book ai didi

c# - 什么导致 .NET 中的内存碎片

转载 作者:IT王子 更新时间:2023-10-29 03:52:01 33 4
gpt4 key购买 nike

我正在使用 Red Gates ANTS 内存分析器来调试内存泄漏。它一直警告我:

Memory Fragmentation may be causing .NET to reserver too much free memory.

Memory Fragmentation is affecting the size of the largest object that can be allocated

因为我有强制症,所以必须解决这个问题。

有哪些标准编码实践有助于避免内存碎片。您可以通过一些 .NET 方法对其进行碎片整理吗?它甚至有帮助吗?

最佳答案

你知道,我有点怀疑这里的内存分析器。 .NET 中的内存管理系统实际上试图通过在内存中移动来为您整理堆碎片(这就是为什么您需要固定内存以便与外部 DLL 共享)。

在较长时间内占用的大内存分配容易产生更多碎片。虽然小的临时(短)内存请求不太可能导致 .NET 中的碎片。

这里还有一些值得思考的地方。对于当前的 .NET GC,分配的内存在时间上很接近,通常在空间上也很接近。这与碎片化相反。即,您应该按照您打算访问它的方式分配内存。

它只是托管代码还是包含 P/Invoke、非托管内存 (Marshal.AllocHGlobal) 或 GCHandle.Alloc(obj, GCHandleType.Pinned) 之类的内容?

关于c# - 什么导致 .NET 中的内存碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240860/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com