使用 Visual Studio 分析 .NET Dump
內存泄漏和高CPU使用率是在日常開發(fā)中經常遇到的問題,它們可能會導致應用程序性能下降甚至崩潰。今天我們來講講如何使用Visual Studio 2022分析.NET Dump,快速找到程序內存泄漏問題。
什么是Dump文件?
Dump文件又叫內存轉儲文件或者叫內存快照文件。用于存儲程序運行時的狀態(tài)信息的文件,這些文件通常包含了程序運行時的內存內容、線程信息、堆棧調用信息、異常信息等數據。Dump文件可以在程序崩潰、失去響應、資源消耗過高或者性能不理想等情況下生成,以幫助開發(fā)人員進行故障排查和調試。
編寫一段內存泄漏的代碼
下面我們編寫一段死循環(huán)代碼用于演示內存泄漏的情況:
internal class Program
{
static List<List<string>> memoryLeakList = new List<List<string>>();
static void Main(string[] args)
{
//編寫一段死循環(huán)代碼用于演示內存泄漏的情況
//每次迭代都會創(chuàng)建一個新的List<string>對象并將其添加到一個靜態(tài)的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);
}
}
}
查看程序運行情況并創(chuàng)建Dump文件
程序運行內存泄漏情況:
創(chuàng)建轉儲文件(Dump文件):
使用Visual Studio分析Dump
(1) 打開Dump文件
使用打開TestConsoleApp (2).DMP文件:
(2) 運行診斷分析
(3) 診斷分析結果(定位內存泄漏位置)
因為我們要查看程序內存泄漏問題,所以我們針對性的查看線程調用堆棧結果即可。
課外拓展:因為線程調用堆棧是在內存上操作的,每個線程都有自己的調用堆棧,用于跟蹤當前執(zhí)行的方法和函數調用關系。當您在應用程序中啟動一個線程時,系統會為該線程分配一定的內存來存儲它的調用堆棧信息。