一:背景
C# 程序内存泄漏的诱发因素
有很多,但从顶层原理上来说,就是该销毁的 用户根
对象没有被销毁,从而导致内存中意料之外的对象无限堆积,导致内存暴涨,最终崩溃,这其中的一个用户根就是 终结器队列
,这一篇我们就来看下如何让 PerfView 配合 WinDbg 双剑合璧。
二:如何洞察
1. 终结器内存泄漏
为了模拟 终结器内存泄漏
,我们故意在 析构函数
中执行复杂的逻辑,让析构过程足够的慢,这样可以实现 分配速度 远大于 销毁速度 ,达到消费能力不足引发的内存暴涨, 参考如下代码:
internal class Program
{
static void Main(string[] args)
{
Task.Run(Add);
Console.ReadLine();
}
static void Add()
{
for (int i = 0; i < 1000000; i++)