![](/img/trans.png)
[英]Do static methods in a C# .NET Singleton class have a negative effect on performance or memory consumption?
[英]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.