我有兩個問題:在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。
我有兩個問題:在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。
需要增加,可以通過100和寫作這樣的代碼去最大的計數器:
選項給出:
for(int i=0;i=100;i++)
for(long i=0;i=1000;i++)
編輯:如前所述,這些都不會Ë因爲中間表達式是一個賦值而不是bool
類型的表達式,所以ven實際上是編譯的。
這證明了一個非常重要的觀點:讓你的代碼在你快速使用之前工作。你的兩個循環不會做同樣的事情 - 一個上限爲1000,另一個上限爲100.如果你必須選擇「快速」和「正確」,你幾乎總是想要選擇「正確」。 (當然也有例外 - 但這通常是根據大量數據的結果的絕對正確性而不是代碼的正確性。)
在此處更改變量類型不太可能產生任何可測量差異。微型優化通常就是這種情況。在性能方面,體系結構通常比內部優化更重要,而且稍後改變也很困難。在一般情況下,你應該:
DateTime dtStart = DateTime.Now;
for(int i=0;i=10000;i++)
{
Some Code
}
response.write ((DateTime.Now - dtStart).TotalMilliseconds.ToString());
長期一樣好,你可以知道哪一個是更好的...;)
當你正在做的事情需要一個數字代表迭代或數量,你應該總是使用int
,除非你有一個好的語義理由使用不同的類型(即數據永遠不會是負數,或者它可能大於2^31)。此外,在編寫c#代碼時,擔心這種納米優化問題基本上不會影響。這就是說,如果你想知道這樣的事情之間的差異(增加一個4字節的寄存器與增加8個字節),你總是可以考慮先生Agner的美妙的instruction tables。
在一個AMD64機,遞增long
花費相同的時間量遞增int
。**
在32位x86機器,遞增int
將花費較少的時間。
**幾乎所有的邏輯和數學運算都是如此,只要該值不是內存約束和未對齊。在.NET中,一個long
將始終對齊,所以這兩個將始終保持一致。
實際上,兩個循環都做同樣的事情,因爲循環體都不會執行一次(畢竟我們正在討論使代碼正確)。 – phoog 2012-08-03 06:30:02
事實上,這段代碼完全不起作用,因爲循環條件在第一次運行時不會成立(更多的情況甚至不是條件)。 – 2012-08-03 06:32:38
我只想在一個大型項目中知道建築是關鍵,那麼最好的計劃是什麼...... – Sham 2012-08-03 06:37:23