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

在此如果計數爲多,是它最好之前申報「DomainConstants.PaymentPending整數聲明另一個變量'在循環開始之前或這不會導致任何性能影響。有時計數可能會達到100.在for循環中是最好的常數一次又一次轉換,而不是在循環開始

+0

之前聲明一個變量。這樣,代碼會更清晰(如果您正確地命名該變量)並且執行速度會更快。 (OK從0到100的循環,性能改進不可見,但仍然)。 –

+0

謝謝Cedrik ... 在此我想問一下,有什麼文章可以找到最佳實踐。例如,我們應該使用'=='還是'.Equals'; '使用'或'嘗試抓住'.. –

+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 
+0

+1「爲什麼這是錯誤的類型呢?」 – CodesInChaos

2

一般來說,你的擔心是完全有效的,你的思維方式是正確的,因爲一旦再計算的東西「緩存」,它是爲了提高程序性能的有效技術。但是,它通常適用於計算大而複雜的事情,例如從文件,動態生成的圖像等分析的結構。

簡單的數字解析不會導致任何易於觀察到的性能瓶頸,因此將其移出循環不會給出任何可觀察的改進,至少如果循環重複計數與您聲明的順序相同。

在這個特殊的例子中,你應該或多或少的去閱讀。如果你參與過一個具有執行時間要求的項目,那麼你很可能已經知道了更多用於提高性能的技術(其中許多技術將比所討論的技術更有效)以及如何應用每種技術一。

+1

謝謝,Theodoros ...其實我必須提高我的應用程序的性能,我找不到任何改進的地方。所以我從基礎開始......如果這可以幫助.. –

+1

@UserM在這種情況下,您應該通過一個分析器運行您的應用程序。這將突出你應該關注的領域。試圖改善您的應用程序性能。通過「查看代碼」只會導致挫折和痛苦。 –