在C#中调用方法时的预热

Che*_*hen 10 .net c# performance extension-methods

我刚看到这篇关于时间测量的帖子.我记得(我希望我没有记错)这是一场不公平的比赛,如果以前从未打过这种方法的话.那是:

// At the beginning of the application
MyClass instance = new MyClass();
instance.MyMethod();
instance.MyMethod();  // Faster than the first call, because now it's warmed up.
Run Code Online (Sandbox Code Playgroud)

我们真的在C#中有这样的热身理论吗?如果是,为什么(热身时CLR会做什么)?如果这个方法是扩展方法(静态方法),那么一切都是一样的吗?

Bro*_*ass 7

如果通过"热身"你指的是JIT'ing那么是 - 如果一个方法永远不会被调用它将不会被编译,所以你第一次运行它可能会更慢.另请参阅.NET CLR JIT每次编译每种方法吗?


And*_*est 6

这是由于即时(JIT)编译.如果您想提高性能并避免这种影响,Native Image Generator(Ngen.exe)可以为您提供帮助.