Google了一番,C#中似乎没有如VLD之于C++那样好用且免费的内存泄漏检测工具包。C#中比较出名的是Deleaker,不过价格实在不菲。
退而求其次,直接在代码中调用GC把进程的内存消耗的输出出来。有助于检查内存泄漏情况。代码如下:
StringBuilder sbSummary = new StringBuilder();
sbSummary.AppendFormat($"Simulation running {i} day using {Math.Round(tmpTimeCost.TotalMilliseconds / 1000, 2)} seconds.");
sbSummary.AppendLine(String.Format("Total memory: {0:###,###,###,##0} bytes", GC.GetTotalMemory(true)));
Console.WriteLine(sbSummary.ToString());
输出为:
Simulation running 1 day using 36.29 seconds.Total memory: 156,221,624 bytes
Simulation running 2 day using 23.67 seconds.Total memory: 165,827,176 bytes
Simulation running 3 day using 31.33 seconds.Total memory: 176,686,048 bytes
可以明显看到内存在漏了。
然后在使用VS自带的性能提示和诊断工具“PerfTips and Diagnostics Tools”,尝试对代码进行调优。
详细步骤都在官方文档里了,此处不再赘述。链接如下: