簡體   English   中英

C#中的性能和內存消耗

[英]Performance and Memory Consumption in C#

我有兩個問題:

1)我需要一些專家的觀點來證明代碼,這將對性能和內存消耗明智。

2)性能和內存消耗明智地遵循以下一段代碼,為什么?

需要將可能增加到最大的計數器增加100並編寫如下代碼:

一些示例代碼如下:

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

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

只要要求相同,使用Int16或其他任何方法代替int有多好。

需要將可能增加到最大的計數器增加100並編寫如下代碼:

給出的選項:

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

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

編輯:如前所述,由於中間表達式是賦值而不是bool類型的表達式,因此它們都無法真正編譯。

這表明了一個非常重要的觀點: 在使代碼變得快速之前就使代碼能夠正常工作 您的兩個循環執行的操作不同-一個循環的上限為1000,另一個循環的上限為100。如果必須在“快速”和“正確”之間進行選擇,則幾乎總是要選擇“正確” ”。 (當然,也有例外-但這通常是針對大量數據的結果的絕對正確性,而不是代碼正確性。)

在此處在變量類型之間進行更改不太可能產生任何可測量的差異。 微觀優化通常就是這種情況。 當涉及到性能,結構通常比法優化更加重要-這也是很多難以改變以后。 通常,您應該:

  • 使用最正確,最簡單地表示數據的類型編寫最干凈的代碼
  • 確定合理的性能要求
  • 衡量您的干凈實施
  • 如果性能不夠好,請使用性能分析等方法找出改進方法
DateTime dtStart = DateTime.Now;


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

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

對於Long來說也是如此,您可以知道哪一種更好...;)

當您做的事情需要表示迭代的數字或某事物的數量時,除非有充分的語義理由要使用其他類型(即數據永遠不能為負數,否則它可以大於2),否則應始終使用int ^ 31)。 另外,擔心這種納米優化問題在編寫c#代碼時基本上不會有任何問題。

話雖這么說,如果您想知道這樣的事情之間的區別(增加4字節寄存器與增加8字節),您總是可以咨詢阿格納先生的精美指令表

在Amd64機器上, long的增加與int增加花費相同的時間。**

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

**幾乎所有邏輯和數學運算都一樣,只要該值既不是內存綁定的也不是未對齊的。 在.NET中, long始終會對齊,因此兩者始終是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM