gpt4 book ai didi

.net - 我的堆是碎片化的吗

转载 作者:IT王子 更新时间:2023-10-28 23:34:37 25 4
gpt4 key购买 nike

0:000> !dumpheap -stat
total 1755874 objects
Statistics:
MT Count TotalSize Class Name
7b9b0c64 1 12 System.Windows.Forms.Layout.TableLayout+ColumnSpanComparer
....
7933303c 14006 4926456 System.Collections.Hashtable+bucket[]
65246e00 804 4982192 System.Data.RBTree`1+Node[[System.Int32, mscorlib]][]
054c55f0 44240 5662720 DevExpress.Utils.AppearanceObject
793040bc 98823 7613156 System.Object[]
793308ec 293700 55820016 System.String
002435f0 50315 138631888 Free
Total 1755874 objects

Fragmented blocks larger than 0.5 MB:
Addr Size Followed by
15a195c8 0.8MB 15ae3950 System.Collections.ArrayList
15d81468 1.6MB 15f23708 System.String
15f23984 1.0MB 16029ae4 System.String
... about 7 more objects here
1ee51764 0.5MB 1eedbaa4 System.WeakReference
1f0df96c 2.4MB 1f34d4b0 System.String
1f3e1ca8 3.7MB 1f79afc4 System.WeakReference

我一直在阅读有关固定和碎片的信息。考虑到大量的可用空间,它在我看来是支离 splinter 的。我想我现在必须追查它。

想法?反馈?

最佳答案

所以...我们知道我们有一个碎片堆。下一个问题是:是什么导致了碎片化?是什么阻止了这些自由对象被释放?我读过的建议是在可用空间之后检查对象:

  1. !dumpheap -stat

  2. 转储Free对象的方法表:!dumpheap -mt 000db8e8

  3. 从列表中选择一个自由对象进行更仔细的检查:!dumpobj 0x2003b0b0

  4. 记录对象的大小

  5. 转储它之后的下一个对象:!dumpobj 0x2003b0b0+1000

  6. 找到持有引用的对象 !gcroot 0x2003b0b0+1000

  7. 转储找到的对象的 gchandle。

我通常会陷入这个兔子洞,而我对 .NET API 的有限知识在这里失败了。这是调试问题的正确方法吗?

杰夫

关于.net - 我的堆是碎片化的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870723/

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