使用Visual Studio分析.NET Dump

China Soft發表於2024-06-06

前言

記憶體洩漏和高CPU使用率是在日常開發中經常遇到的問題,它們可能會導致應用程式效能下降甚至崩潰。今天我們來講講如何使用Visual Studio 2022分析.NET Dump,快速找到程式記憶體洩漏問題。

什麼是Dump檔案?

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

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

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

    internal class Program
{
static List<List<string>> memoryLeakList = new List<List<string>>();

static void Main(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檔案:

執行診斷分析

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

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

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

更多Visual Studio程式設計效率提升技巧

  • https://github.com/YSGStudyHards/DotNetGuide
  • Visual Studio程式設計效率提升技巧集(提高.NET程式設計效率)

DotNetGuide技術社群交流群

  • DotNetGuide技術社群是一個面向.NET開發者的開源技術社群,旨在為開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和諮詢、專案框架推薦、求職和招聘資訊、以及解決問題的平臺。
  • 在DotNetGuide技術社群中,開發者們可以分享自己的技術文章、專案經驗、學習心得、遇到的疑難技術問題以及解決方案,並且還有機會結識志同道合的開發者。
  • 我們致力於構建一個積極向上、和諧友善的.NET技術交流平臺。無論您是初學者還是有豐富經驗的開發者,我們都希望能為您提供更多的價值和成長機會。

相關文章