相关疑难解决方法(0)

了解.NET中的垃圾收集

考虑以下代码:

public class Class1
{
    public static int c;
    ~Class1()
    {
        c++;
    }
}

public class Class2
{
    public static void Main()
    {
        {
            var c1=new Class1();
            //c1=null; // If this line is not commented out, at the Console.WriteLine call, it prints 1.
        }
        GC.Collect();
        GC.WaitForPendingFinalizers();
        Console.WriteLine(Class1.c); // prints 0
        Console.Read();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,即使main方法中的变量c1超出范围并且在GC.Collect()调用时没有被任何其他对象进一步引用,为什么它没有在那里完成?

.net c# garbage-collection

161
推荐指数
2
解决办法
5万
查看次数

什么是"Async Pinned Handle"?

我正在尝试调查一个非常讨厌的软件崩溃,这可能与托管堆损坏有关(因为它发生在垃圾收集期间).使用WinDbg与(SOS)!gshandles命令我得到类似的东西

0:000> !gchandles
GC Handle Statistics:
Strong Handles: 259
Pinned Handles: 137
Async Pinned Handles: 1
Ref Count Handles: 79
Weak Long Handles: 197
Weak Short Handles: 650
Other Handles: 0
Statistics:
Run Code Online (Sandbox Code Playgroud)

而我只是好奇,"普通"固定手柄和"异步固定"手柄有什么区别?我能找到哪个句柄是"异步"的吗?我在网上找不到任何关于它的信息,因为当这个计数器正好与崩溃有关时,应用程序似乎总是崩溃.但话说回来它可能只是垃圾收集过程中使用的一些内部东西.

c# debugging windbg

25
推荐指数
1
解决办法
3280
查看次数

标签 统计

c# ×2

.net ×1

debugging ×1

garbage-collection ×1

windbg ×1