dotNet里的inline

来源:互联网 发布:织梦云代挂源码 编辑:程序博客网 时间:2024/04/25 20:28

dotNet里的inline

2005-3-31

dotNet里的内联是由CLR在JIT时做的,编译后IL代码在16个字节以内的可内联函数会被自动内联。有个好处就是调试时不内联,以准确的对应到源代码并提供调试信息。但很多人发现他们预期被内联的函数没有被内联,导致了很大的效率损失。其实,罪魁祸首正是调试器。只要有IDE在运行,也就是有调试器在,CLR就不会做内联。只要关掉所有的IDE,再运行Release版的dotNet程序,就会发现速度提高很多。

有些人做的速度测试就是在IDE里做的,也就是说他们的结果只是调试期结果。一个简单的访问属性的循环,在开IDE和没有IDE时有接近100倍的速度差异。这可能会和C#与Java的速度之争撤上关系,谁爱花时间争就争吧。

这种速度差异对用STL的C++程序员来说司空见惯,但对Delphi程序员可能很不适应。其实对Delphi也差不多,Delphi是在IDE里运行和在IDE外运行有不到5倍的速度差异。

原创粉丝点击