【问题标题】:Is the Main method JIT'd?主要方法是 JIT 的吗?
【发布时间】:2010-09-29 09:32:18
【问题描述】:

我记得该函数在第二次调用时是 JIT 的。

Main 方法呢?里面的代码会被 JIT 处理吗?

如果我测量一些代码块,我应该把它包装在一个函数中吗?

【问题讨论】:

    标签: c# clr jit


    【解决方案1】:

    所有 .NET (MSIL) 代码都必须经过 JIT 处理(编译为本机代码)才能执行。

    您可能指的是,一旦代码被 JIT 化,它就会被缓存。 JIT'ing 的开销只发生一次。如果您想在没有 JIT 开销的情况下执行基准测试,则必须“预热”您的基准测试,或者可能使用 NGEN 永久编译 MSIL。

    【讨论】:

      【解决方案2】:

      回答附带问题:

      如果我测量一些代码,应该 我把它包装在一个函数中?

      这大概是关于测量某些代码的性能,通常的建议是将其放在一个方法中,并在开始计时循环之前至少调用该方法一次。这样可以避免第一次调用方法时通常会产生的 JIT 开销。

      【讨论】:

        【解决方案3】:

        一个方法在第一次被调用时就被jit了。

        .Net 无法执行非抖动方法。

        所以main 被jit了。

        See also this answer from Jon Skeet.

        【讨论】:

          猜你喜欢
          • 2011-02-08
          • 2015-03-26
          • 2021-06-07
          • 1970-01-01
          • 2013-05-31
          • 2012-04-01
          • 2011-04-14
          • 2013-04-04
          • 2013-04-09
          相关资源
          最近更新 更多