在for循环中,建议一次又一次地转换常量,而不是在循环开始之前声明另一个变量

时间:2013-01-31 18:39:21

标签: .net performance c#-3.0

for(int i=0;i<someDomain.count;i++)
{
   if(someDomain.someValue != Convert.ToInt32(DomainConstants.PaymentPending))
   {
      Dosomething...
    }
}

如果计数更多,建议在循环开始之前为“DomainConstants.PaymentPending”声明一个整数,否则不会导致任何性能损失。有时计数可能会达到100。

2 个答案:

答案 0 :(得分:3)

转换常量值一次可能会改善此循环的性能。

话虽如此,这不太可能是性能瓶颈。在您分析应用程序并发现这是一个实际问题之前,我不一定会担心这种级别的微优化。

相反,我会专注于使您的代码尽可能最易读。就个人而言,我认为在这种情况下,使变量更具可读性和可维护性。我会把上面的内容写成:

// Why is this the wrong type in the first place?
var paymentPending = Convert.ToInt32(DomainConstants.PaymentPending); 

foreach(var domain in someDomains.Where(sd => sd.Value != paymentPending)
{
   // Do something with domain

答案 1 :(得分:2)

一般来说,你的关注是完全有效的,你的思维方式是正确的,因为计算一次然后“缓存”它是一种提高程序性能的有效方法。但是,它通常适用于计算量大且复杂的事物,例如从文件解析的结构,动态生成的图像等。

简单的数字解析不会导致任何容易观察到的性能瓶颈,因此将其移出循环不会给出任何可观察到的改进,至少如果循环重复次数与您声明的顺序相同。

在这个特定的例子中,你应该或多或少地追求可读性。如果你参与了一个有执行时间要求的项目,那么你很可能已经知道了许多实现性能提升的技术(其中一些技术将比相关的技术更有效)以及如何应用每个技术之一。