为什么在调试和发布期间实例的实例化方式不同?

时间:2016-11-23 22:39:45

标签: c# visual-studio compiler-optimization

到目前为止,在实现单例模式时,我使用了以下两种变体之一:

public class ClassX
{
    private static ClassX _instance1;
    public static ClassX Instance1 {
        get {
            if (_instance1 == null) {
                _instance1 = new ClassX();
            }

            return _instance1;
        }
    }


    public static readonly ClassX Instance2 = new ClassX();
}

在第一个版本中,创建实例时很明显:首先调用公共属性。

第二个我认为是一个方便的简写,如果可能的话(例如,该类不需要非常量参数),我真的不需要为确切知道实例的创建时间而烦恼。并且没有,假设编译器会相应地跟踪依赖关系......

但事实证明Instance2创建的顺序和时间不同,具体取决于构建:调试或发布。

我想/假设它与编译器对这两种情况的优化有关,但我想知道,如果有人能够对这个问题有更多的了解。

并且:编译器可以被教导同时处理(关于这个问题)吗?我应该总是使用第一种语法吗?或者更多地了解Lazy<T>

谢谢!

0 个答案:

没有答案