當前位置: 妍妍網 > 碼農

使用 Visual Studio 分析 .NET Dump

2024-06-06碼農

前言

記憶體泄漏和高CPU使用率是在日常開發中經常遇到的問題,它們可能會導致應用程式效能下降甚至崩潰。

我們來講講如何使用Visual Studio 2022分析.NET Dump,快速找到程式記憶體泄漏問題。

什麽是Dump檔?

Dump檔又叫記憶體轉儲檔或者叫記憶體快照檔。

用於儲存程式執行時的狀態資訊的檔,這些檔通常包含了程式執行時的記憶體內容、執行緒資訊、堆疊呼叫資訊、異常資訊等數據。Dump檔可以在程式崩潰、失去響應、資源消耗過高或者效能不理想等情況下生成,以幫助開發人員進行故障排查和偵錯。

編寫一段記憶體泄漏的程式碼

下面我們編寫一段死迴圈程式碼用於演示記憶體泄漏的情況:

internal classProgram
{
static List<List<string>> memoryLeakList = new List<List<string>>();
staticvoidMain(string[] args)
{
//編寫一段死迴圈程式碼用於演示記憶體泄漏的情況
//每次叠代都會建立一個新的List<string>物件並將其添加到一個靜態的List<List<string>>集合中,但卻沒有釋放這些物件,從而導致記憶體泄漏
while (true)
{
var newList = new List<string>();
for (int i = 0; i < 1000; i++)
{
var currentValue = i + " - " + Guid.NewGuid().ToString();
Console.WriteLine(currentValue);
newList.Add(currentValue);
}
memoryLeakList.Add(newList);
}
}
}

檢視程式執行情況並建立Dump檔

程式執行記憶體泄漏情況

建立轉儲檔(Dump檔)

使用Visual Studio分析Dump

開啟Dump檔

使用開啟 TestConsoleApp (2).DMP 檔:

執行診斷分析

診斷分析結果(定位記憶體泄漏位置)

因為我們要檢視程式記憶體泄漏問題,所以我們針對性的檢視執行緒呼叫堆疊結果即可。

課外拓展:因為執行緒呼叫堆疊是在記憶體上操作的,每個執行緒都有自己的呼叫堆疊,用於跟蹤當前執行的方法和函式呼叫關系。當您在應用程式中啟動一個執行緒時,系統會為該執行緒分配一定的記憶體來儲存它的呼叫堆疊資訊。

- EOF -

推薦閱讀 點選標題可跳轉

看完本文有收獲?請轉發分享給更多人

推薦關註「DotNet」,提升.Net技能

點贊和在看就是最大的支持❤️