![](/img/trans.png)
[英]Visual Studio 2019 memory profiler tool lists all objects in managed heap as UNKNOWN
[英]What is inside the other managed-heaps that Visual Studio won't display?
我的ASP.NET Core 2.2 Web應用程序在.NET Framework 4.7.2上運行,閑置啟動后使用超過220MB以上的內存。
220MB高-因為它是在小型Azure應用服務計划中運行的,所以我想看看可以做些什么來減少內存使用。 Visual Studio的“診斷工具”窗口顯示,托管對象堆僅占該220MB中的11MB。
我不滿意該解釋(其他209MB又去了哪里?!),我使用VMMap進行了查看,並報告說85MB的進程專用字節是不同的托管堆,而不是Visual Studio報告的11MB。
這是屏幕截圖:
我知道Visual Studio在“內存快照”中報告的11.5MB堆可能對應於VMMap中的第一子行(使用11,523 K
的Gen0
堆)-但是其他類似大小的堆(10.3MB,9.9MB, 9.4MB,9.0MB,5.7MB)-這些內容里面有什么,為什么VS不報告它們? 如果它們與應用程序無關,那么當它不在調試器下運行時,為什么進程的內存使用率如此之高?
經過一番研究-我在解釋大多數堆的地方找到了一個解釋:
默認情況下,ASP.NET Core程序使用“服務器” GC系統運行,該系統為每個處理器核心創建一個單獨的托管堆實例-所有這些堆都映射到單個邏輯托管堆。
因此,11.5MB的堆大小是正確的-但這意味着我的計算機上有6個11.5MB的堆:每個處理器核心一個(盡管它們的大小實際上不是11.MB,但它們足夠接近了:10.3MB,9.9MB 9.4MB,9.0MB,5.7MB-因為在那些特定於內核的堆中放置的對象減少了)
此頁面對此有所說明: https : //docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/fundamentals-查找標題“工作站和服務器垃圾收集”。
仍然-我沒想到這一點。 我希望在Visual Studio生成的app.config
/ web.config
-file內找到類似內容豐富的XML注釋,該注釋實際上將<gcServer enabled="true" />
放在默認項目模板中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.