如何在本地停用优化

时间:2017-07-26 08:08:30

标签: c# compiler-optimization jit

我遇到了奇怪的问题。我的应用程序有下一个代码,它在启动时执行:

protected override void RegisterTypes()
{
    // App.container - UnityContainer
    var dvcc = new MyClientCore(new MySorter());
    App.container.RegisterInstance(typeof(ClientCore), dvcc);
    App.container.RegisterInstance(typeof(MyClientCore), dvcc);

    this.dataProvider = new MyProvider();
    this.dataProvider.Configure(App.container);
    App.container.RegisterInstance(typeof(Provider), this.dataProvider);
    App.container.RegisterInstance(typeof(MyProvider), this.dataProvider);

    // Create view models and register them in container
    this.RegisterViewModels();

    // Command - singleton, that resolved in ctor view models, 
    // that registered in RegisterViewModels();
    Command.Instance.InitCommands();

    // Create and configure shell 
}

当app在调试配置中执行时没有问题。此外,当app在Visual Studio中的发布配置中执行时。 但是当我尝试直接启动app时,由于在dataProvider.Configure方法中注册的依赖项的解析,我在Command ctor中得到了TypeInitializationException。

我认为这是JIT优化的原因,代码可能像

一样执行
protected override void RegisterTypes()
{
    Command.Instance.InitCommands();
    // other method body
}

我找到了解决方案 - 标记RegisterTypes方法属性[MethodImpl(MethodImplOptions.NoOptimization)]。

但也许存在更好的方法来修复它?当这种情况用简单的词语解释时,我也会对链接感到满意。

P.S。抱歉我的英文。

0 个答案:

没有答案