前言
記憶體泄漏和高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技能
點贊和在看就是最大的支持❤️