当我读到有关C#或Java等JITted语言的性能时,作者通常会说它们理论上应该/可以胜过许多本机编译的应用程序.理论上,本机应用程序通常只是为处理器系列(如x86)编译,因此编译器无法进行某些优化,因为它们可能并非真正在所有处理器上进行优化.另一方面,CLR可以在JIT过程中进行特定于处理器的优化.
有谁知道微软(或Mono)的CLR在JIT过程中是否实际执行特定于处理器的优化?如果是这样,有什么样的优化?
我刚看到这篇关于时间测量的帖子.我记得(我希望我没有记错)这是一场不公平的比赛,如果以前从未打过这种方法的话.那是:
// 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会做什么)?如果这个方法是扩展方法(静态方法),那么一切都是一样的吗?
当我们远程方法(使用泛型)时,远程接收器似乎无法从其他相同的命名方法中发现我们的方法.使用附带的.net源代码进行调试我已将其发送到有MethodInfo.MakeGenericMethod呼叫的地方.但是我无法查看任何周围的数据,因为它已被jit优化.
几个星期前,我遇到了一个注册表设置,它将禁用此设置(它特别提到它有助于调试源代码).然而,作为一个沃利我失去了我用它做的事情,我很难再找到它.
每次我在IL中使用它们:br_S,ldc_i4_S,ldarg_S等等......所以我只需要问这个问题:
我的意思是......如果你是从IL到本地汇编程序的JIT语言,它在性能方面应该不重要,对吧?那么这些"短手"符号的目的是什么?是仅仅因为IL二进制文件中的字节数较少(例如作为压缩机制)还是有其他原因?
如果它只是一个压缩机制,为什么不使用压缩算法,如deflate?
到目前为止,我记得第二次调用该函数时是JIT'd.
Main方法怎么样?里面的代码是JIT吗?
如果我发现了一些代码,我应该把它包装在一个函数中吗?
.net ×4
c# ×4
clr ×3
jit ×3
asp.net ×1
il ×1
opcode ×1
optimization ×1
performance ×1
remoting ×1