C# 如何局部禁用优化
我面临着一个奇怪的问题。我的应用程序有下一个代码,在启动时执行:C# 如何局部禁用优化,c#,compiler-optimization,jit,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.Register
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
}
当应用程序在调试配置中执行时,没有问题。当应用程序在VisualStudio的版本配置中执行时也是如此。
但当我尝试直接启动应用程序时,由于dataProvider.Configure方法中注册的依赖项的解析,我在命令ctor中得到TypeInitializationException
我认为这是JIT优化的原因,代码的执行可能是这样的
protected override void RegisterTypes()
{
Command.Instance.InitCommands();
// other method body
}
我找到了该方法的解决方案-标记RegisterTypes方法atribute[MethodImpl(MethodImplOptions.NoOptimization)]
但也许有更好的方法来修复它?当我用简单的语言解释这种情况时,我也会很高兴与林克联系
另外,对不起我的英语。为什么你认为这是JIT优化?“当应用程序在调试配置中执行时没有问题。当应用程序在visual studio中的发布配置中执行时也没有问题。”发布配置已启用优化,甚至在visual studio下运行,因此您已经显示它可以在启用优化的情况下工作。您没有提供足够的代码来重现错误,因此其他人无法对其进行调查。解决方案包含多个项目和完整的例子将是大。我认为,因为问题是在添加[MethodImpl(MethodImplOptions.NoOptimization)]后解决的,为什么您认为这是JIT优化?“当应用程序在调试配置中执行时没有问题。当应用程序在visual studio中的发布配置中执行时也没有问题。”发布配置已启用优化,甚至在visual studio下运行,因此您已经显示它可以在启用优化的情况下工作。您没有提供足够的代码来重现错误,因此其他人无法对其进行调查。解决方案包含多个项目和完整的例子将是大。我认为是这样的,因为在添加[MethodImpl(MethodImplOptions.NoOptimization)]之后问题就解决了