首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与不可终结化对象相比的GC.SuppressFinalize性能

与不可终结化对象相比的GC.SuppressFinalize性能
EN

Stack Overflow用户
提问于 2012-03-29 01:48:54
回答 1查看 808关注 0票数 11

带有GC.SuppressFinalize的可finalizable对象是否与普通的不可finalizable对象相同?下面的代码似乎证明了它们在.NET 2和4上得到了不同的处理:

代码语言:javascript
复制
class Class1 {

    public Class1()
    {
        GC.SuppressFinalize(this);
    }

    //~Class1() { }
}

class Program
{
    static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();

        for (int i=0; i<100000000; i++)
        {
            new Class1();
        }

        sw.Stop();
        Console.WriteLine(sw.ElapsedMilliseconds);
    }
}

添加终结器,但不更改任何其他内容,会导致代码花费更长的时间(12601毫秒与889毫秒相比)。

我认为SuppressFinalize在object头中设置了一个位,使GC将该对象视为非finalizable对象,但事实似乎并非如此。那到底是怎么回事?非finalizable对象和调用了GC.SuppressFinalize的finalizable对象有什么不同?

EN

回答 1

Stack Overflow用户

发布于 2012-03-29 05:43:42

据我所知,CLR有一个为其注册了finalization的对象队列。实现终结器将把该类型的对象放到队列中。因此,在构造函数调用SuppressFinalize的情况下,我认为对象实际上被放到队列中只是为了立即删除,这可以解释开销。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9912981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档