2012-08-03 29 views
1

我有兩個問題:在C#中的性能和內存消耗

1)我需要一些專家視圖的代碼,這將是性能和內存消耗明智的聲音足夠。

2)性能和內存消耗明智的跟隨一段代碼有多好/好,爲什麼?

需要增加,可以去100最大和編寫代碼是這樣的計數器:

一些示例代碼如下:

 

for(int i=0;i=100;i++) 
{ 
    Some Code 
} 

for(long i=0;i=1000;i++) 
{ 
    Some Code 
} 

是如何很好用的Int16或其他任何東西,而不是int,如果需求相同,則long。

回答

5

需要增加,可以通過100和寫作這樣的代碼去最大的計數器:

選項給出:

for(int i=0;i=100;i++) 

for(long i=0;i=1000;i++) 

編輯:如前所述,這些都不會Ë因爲中間表達式是一個賦值而不是bool類型的表達式,所以ven實際上是編譯的。

這證明了一個非常重要的觀點:讓你的代碼在你快速使用之前工作。你的兩個循環不會做同樣的事情 - 一個上限爲1000,另一個上限爲100.如果你必須選擇「快速」和「正確」,你幾乎總是想要選擇「正確」。 (當然也有例外 - 但這通常是根據大量數據的結果的絕對正確性而不是代碼的正確性。)

在此處更改變量類型不太可能產生任何可測量差異。微型優化通常就是這種情況。在性能方面,體系結構通常比內部優化更重要,而且稍後改變也很困難。在一般情況下,你應該:

  • 編寫乾淨的代碼就可以了,使用最正確表示數據類型和簡單
  • 確定合理的性能要求。如果
  • 衡量你乾淨實施
  • 它性能不夠好,使用分析等來解決如何改進它
+1

實際上,兩個循環都做同樣的事情,因爲循環體都不會執行一次(畢竟我們正在討論使代碼正確)。 – phoog 2012-08-03 06:30:02

+2

事實上,這段代碼完全不起作用,因爲循環條件在第一次運行時不會成立(更多的情況甚至不是條件)。 – 2012-08-03 06:32:38

+0

我只想在一個大型項目中知道建築是關鍵,那麼最好的計劃是什麼...... – Sham 2012-08-03 06:37:23

0
DateTime dtStart = DateTime.Now; 


for(int i=0;i=10000;i++) 
{ 
    Some Code 
} 

response.write ((DateTime.Now - dtStart).TotalMilliseconds.ToString()); 

長期一樣好,你可以知道哪一個是更好的...;)

0

當你正在做的事情需要一個數字代表迭代或數量,你應該總是使用int,除非你有一個好的語義理由使用不同的類型(即數據永遠不會是負數,或者它可能大於2^31)。此外,在編寫c#代碼時,擔心這種納米優化問題基本上不會影響。這就是說,如果你想知道這樣的事情之間的差異(增加一個4字節的寄存器與增加8個字節),你總是可以考慮先生Agner的美妙的instruction tables

在一個AMD64機,遞增long花費相同的時間量遞增int。**

在32位x86機器,遞增int將花費較少的時間。

**幾乎所有的邏輯和數學運算都是如此,只要該值不是內存約束和未對齊。在.NET中,一個long將始終對齊,所以這兩個將始終保持一致。