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

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

4

2 回答 2

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
于 2013-01-31T18:43:03.913 回答
2

通常,您的担忧是完全正确的,并且您的思维方式是正确的,因为计算一次然后“缓存”它是提高程序性能的有效技术。但是,它通常适用于计算量大且复杂的事物,例如从文件中解析的结构、动态生成的图像等。

简单的数字解析不会导致任何容易观察到的性能瓶颈,因此将其移出循环不会带来任何可观察到的改进,至少如果循环重复计数符合您要求的顺序。

在这个特定的示例中,您应该或多或少地追求可读性。如果您曾经参与过一个对执行时间有要求的项目,那么您很可能已经了解了更多实现性能提升的技术(其中一些技术将比所讨论的技术更有效)以及如何应用每种技术一。

于 2013-01-31T18:55:35.410 回答