[英].Net Garbage Collector - See what is promoted to Gen2 during Runtime
我的程序以非常高的速率(大約1MB /秒)向Gen2提升內存,並且當Gen2收集發生時它會導致性能損失。 我為了解哪些對象被提升而做出的每一次嘗試都失敗了 - 主要是因為當我在windbg中打開2個轉儲時,Gen2大小增加的內存被標記為“Free”。 這讓我懷疑Pinned對象引起了問題,但是perfmon統計數據顯示固定對象的數量非常低(大約2-4)。
我現在正在考慮的是以某種方式識別哪些對象在運行時被提升為Gen2。 有這樣做的方法嗎?
您可以使用WinDbg來調試此類問題。 在垃圾收集例程上設置斷點,檢查托管堆,發生垃圾收集,然后再次檢查托管堆以查看Gen2中的哪些對象。
以下是一些開頭的鏈接:
對不起,這不是你的問題的直接,詳細的答案,但它應該給你一個起點。
你可能會分配很多LOH。 這是一種在LOH分配上有一個斷點的方法。 bp mscorwks!wks::gc_heap::allocate_large_object “!CLRStack”
在Winbdg中。
HTH
您可以嘗試強制gen(0)和gen(1)集合,並在完成運行后立即拍攝快照
GC.Collect(1,GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
CreateDump();
另外,你使用什么樣的GC風味?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.