洞察 C# 终结队列引发的内存泄漏

一:背景

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++)
            

猜你喜欢

转载自blog.csdn.net/shengyin714959/article/details/143445344