性能问题空“;” C#中的陈述

时间:2009-03-20 12:38:04

标签: c# performance

平台:x32上的.NET Framework 3.5 SP1

是否存在关于在代码中留下空语句(“;”,单独)的性能问题?

要标记为答案,你还会教一个男人(我和其他读这篇文章的人)钓鱼吗?意思是,如何弄清楚它是否存在性能问题?

8 个答案:

答案 0 :(得分:14)

1)使用像ildasm或.NET Reflector这样的工具查看生成的程序集内部,并查看IL指令与“;”的关联。空语句(如果有的话;它们可能会被优化为无效。)

2)使用分析器运行一个巨大的循环,其中一些“;”包含在其他代码中,然后在没有“;”的情况下尝试它,看看是否存在差异。

(如果不做其中任何一项,我会非常打赌它会被优化掉并且不产生IL(或某种无操作指令 - 请原谅我的IL无知。)

答案 1 :(得分:6)

空语句产生nop IL代码,因此您可以拥有任意数量的JIT编译器删除它们。

答案 2 :(得分:2)

衡量性能的最简单方法是编写代码并在计时时多次运行。

至于这种情况,我不相信你会因为空行而失去任何代码性能,但是,它可能会影响你的编译时间,(虽然可以忽略不计)。

答案 3 :(得分:1)

查看是否存在性能问题(因为我认为不存在)的最简单方法是运行调试器并查看该行是否已执行。如果它被执行,尝试进入该语句后面的程序集,因为这将指示该语句产生多少指令。但是很可能,这是一个无操作,只是一个时钟滴答。

答案 4 :(得分:1)

作为测试效果的另一种方法:

从:

开始
// breakpoint here
int breakpoint1 = 0;

for (int i = 0; i <= 1000; i++)
{
   // test operation here
   ;
}

// breakpoint here
int breakpoint2 = 0;

运行到第一个断点,然后按F5并计入您的头部。如果它太快,则将循环更改为10,000并再次尝试。如果它太快将其增加到100,000并再试一次。

答案 5 :(得分:0)

我无法想象编译器不会简单地优化空语句的任何情况。除了“什么都不做”之外,它肯定不会生成除了“除之外”之外的任何指如果你认为这有一个性能问题,那么很有可能它是别的。

答案 6 :(得分:0)

我预计性能不会受到影响。

您可以通过检查生成的带有和不带空语句的C#程序的IL代码来检查这一点。您可以使用.NET反射器(www.redgate.com)来检查IL。如果生成相同的IL,则不会有性能损失。

答案 7 :(得分:0)

本着教你钓鱼的精神,

1)检查装配,如建议

2)运行一个大循环&amp;时间(手表是一个非常好的工具)

3)在反汇编窗口中单步执行(类似于1)。

如果你担心性能,那么错误的做法就是开始猜测语言结构。正确的做法是诊断,并让程序告诉你什么是花时间,如

4)my favorite method