簡體   English   中英

Visual Studio無法顯示的其他托管堆內部有什么?

[英]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 KGen0堆)-但是其他類似大小的堆(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM