小编mob*_*bbi的帖子

内部作用域中的嵌套引用类型对象对垃圾收集没有影响:是或否?

我一直在阅读Jeffrey Richter的精美书"CLR via C#"中的垃圾收集章节.在那里,他通过引用从JIT编译器发出的本机代码的反汇编列表,说明了GC在概念上如何工作(如何标记根)的示例.从这个例子中,我发现范围内的嵌套引用类型似乎对加速嵌套变量的垃圾收集具有零效应.我想知道我是否正确理解这一点.无论如何,请考虑以下两个版本的代码:

A)在内部范围中嵌套引用类型变量(y):

namespace scope
{
    class A { public void foo() { } }
    class Program
    {
        static void Main(string[] args)
        {
            A x = new A();
            x.foo();
            {
                A y = new A();
                y.foo();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

B)与上述相同,除了x和y在相同的范围内.

namespace scope
{
    class A { public void foo() { } }
    class Program
    {
        static void Main(string[] args)
        {
            A x = new A();
            x.foo();

            A y = new A();
            y.foo();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

出于好奇,我检查了两个版本生成的IL代码,它们是相同的!

Q1:所以,这似乎意味着确实,范围确定不会以任何方式加速垃圾收集.它是否正确?(注意:我知道"使用"声明 …

c# garbage-collection scope

4
推荐指数
2
解决办法
321
查看次数

标签 统计

c# ×1

garbage-collection ×1

scope ×1