.net - 有什么方法可以更改 .NET JIT 编译器以提高性能而不是编译时间?

标签 .net performance clr jit ngen

我想知道是否有任何方法可以通过指定更深入优化的首选项来更改 .NET JIT 编译器的行为。否则,如果它可以进行某种配置文件引导的优化(如果还没有),那就太好了。

最佳答案

这是在编译程序集时设置的。有两种类型的优化:

  • IL优化
  • JIT native 代码质量。

  • 默认设置是这个
     /optimize- /debug-
    

    这意味着未优化的 IL 和优化的 native 代码。
     /optimize /debug(+/full/pdbonly) 
    

    这意味着未优化的 IL 和未优化的 native 代码(最佳调试设置)。

    最后,为了获得最快的性能:
    /optimize+ /debug(-/+/full/pdbonly)
    

    这会产生优化的 IL 和优化的 native 代码。

    当生成未优化的 IL 时,编译器将在整个代码中插入 NOP 指令。这通过允许在控制流指令(例如 for、while、if、else、try、catch 等)上设置断点使代码更易于调试。

    不管怎样,CLR 在优化代码方面做得非常好。一旦方法被 JIT,调用或 callvirt 指令上的指针将直接指向 native 代码。

    此外,在 JIT 代码时,CLR 将利用任何可用的架构技巧。这意味着通过 JIT 运行的程序集将比使用 Ngen 预编译的程序集运行得更快(尽管启动时间稍慢),因为 NGen 将针对所有平台进行编译,并且不会利用任何技巧。

    关于.net - 有什么方法可以更改 .NET JIT 编译器以提高性能而不是编译时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/98624/

    相关文章:

    c# - 此代码是否在对象创建后不久通过访问器设置值

    performance - React Native 与 Redux 的低性能

    performance - Nativescript 导航非常慢

    c# - 在没有代码签名的情况下从文件共享运行 .NET 应用程序

    vb.net - 动态代码执行 : String -> Runtime code VB.net

    c# - 如何解析和执行命令行样式字符串?

    c# - 如何修复不可信数据的反序列化

    c# - 寻找 .Net ORM

    C# 代码在 IIS 上运行很快,但在 Mono 上运行很慢 - 如何改进它?

    events - MVVM 绑定(bind)到 CLR 事件