.net - 在 .NET 中,空方法调用会被优化掉吗?

标签 .net performance

给定一个空的方法体,JIT 会优化调用吗(我知道 C# 编译器不会)。我将如何去发现?我应该使用哪些工具以及我应该在哪里寻找?

因为我确定会被问到,所以空方法的原因是预处理器指令。

@克里斯:
有道理,但它可以优化对方法的调用。因此该方法仍然存在,但可以删除对其的静态调用(或至少内联......)

@乔恩:
那只是告诉我语言编译器不做任何事情。我想我需要做的是通过 ngen 运行我的 dll 并查看程序集。

最佳答案

这章对 JIT 优化有很好的处理,在页面上搜索“方法为空”,大约是文章的一半 -

http://www.codeproject.com/KB/dotnet/JITOptimizations.aspx

显然,空方法确实通过内联实际上没有代码的内容得到了优化。

@Chris:我确实意识到这些方法仍将是二进制文件的一部分,并且这些是 JIT 优化:-)。在半相关的注释中,Scott Hanselman 有一篇关于在发布构建调用堆栈中内联的非常有趣的文章:

http://www.hanselman.com/blog/ReleaseISNOTDebug64bitOptimizationsAndCMethodInliningInReleaseBuildCallStacks.aspx

关于.net - 在 .NET 中,空方法调用会被优化掉吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783/

相关文章:

python-3.x - 如何减少 rasa 3 python 中的模型加载时间

c# - 什么控件最适合好友列表?

c++ - Google Benchmark,如何只调用一次代码?

c# - 即使指定了基础类型,也无法从枚举隐式转换值

java - 使用 Java 中的 .net 库

performance - 为什么矢量化通常比循环更快?

c++ - 性能:循环中的声明 VS 循环中的重新初始化

javascript - 使用 setTimeout 会阻止堆栈增长吗?

c# - 如何在我的列表框中包含图标?

c# - WCF 调用,内部函数速度慢,但直接调用函数时速度快