這不是過早優化本身的問題。一般來說,在垃圾收集器和內存中,幾百個操作(許多可能被複制)對程序有什麼作用,主要是關於字符串的不變性?多個.ToUpper()的影響
1
A
回答
4
對ToUpper
的每個調用都將創建一個新的字符串實例,即使該內容與原始內容相同,並且即使該字符串已經作爲interned字符串文本存在。
因此,數百個ToUpper
調用的影響是您創建了數百個字符串實例。如果字符串很短,這不是問題,尤其是如果您只使用字符串很短的時間。垃圾收集器可以有效處理小而短暫的對象。
例子:
// Interned string literals are the same instance:
string a = "asdf";
string b = "asdf";
Console.WriteLine(Object.ReferenceEquals(a, b)); // True
// ToUpper naturally creates a new instance if the content is changed:
string c = b.ToUpper();
Console.WriteLine(Object.ReferenceEquals(b, c)); // False
// ToUpper creates a new instance even if the content is unchanged:
string d = c.ToUpper();
Console.WriteLine(Object.ReferenceEquals(c, d)); // False
// ToUpper will not intern strings:
string e = "ASDF";
string f = e.ToUpper();
Console.WriteLine(Object.ReferenceEquals(e, f)); // False
// Dynamically created strings can be interned manually:
string g = String.Intern(f);
Console.WriteLine(Object.ReferenceEquals(e, g)); // True
1
每個.ToUpper()
調用都會創建一個新字符串。所以,額外的.ToUpper()
調用絕對是低效的。嘗試儘可能減少不必要的和重複的呼叫是謹慎和專業的。
string Nacho = "cheesy"
Nacho = Nacho.ToUpper()
Nacho = Nacho.Trim().ToUpper()
。 。 。創建了很多字符串垃圾。
但是,如果這段代碼不需要非常快,你不需要太偏執。雖然每個這些孤立的字符串都需要進行垃圾回收,但是這些本地小字符串幾乎總是在GC的部分集合中被拾取,並且內存很快就會返回。確保你的字符串在可能的最有限的範圍內聲明(例如,在例程內而不是在課堂級別)。
2
數百?在大多數情況下幾乎沒有什麼,假設它們不是巨大的字符串,並且你有足夠的內存。數億人可能會產生影響。
基本上每次調用都需要創建一個新的字符串(我不想認爲 .NET檢測到它已經是大寫)。
除非這是你正在做的大部分,否則我不會期望它是一個瓶頸 - 但分析將有助於驗證。
相關問題
- 1. TextView.settextColor影響多個項目
- 2. SVG:一個過濾器多影響
- 3. Scripting.Dictionary性能受多個進程影響
- 4. UICollectionViewCell IBAction影響多個單元格
- 5. jQuery單擊函數影響多個div
- 6. SaveChanges影響多個存儲庫
- 7. 影響多個任務芹菜rate_limit
- 8. 多個線程組相互影響
- 9. 來自多個來源的jQuery動畫 - 影響多個對象
- 10. ToUpper的()在Expression.Call
- 11. StreamReader影響多少內存
- 12. toupper tolower
- 13. Android - 保存多個記錄影響多個表
- 14. Klout中的影響者和影響力
- 15. 瞭解Haskell的`toUpper`
- 16. 如何將多個動態元件的一個元件影響
- 17. 影響同一個ID的多個元素?
- 18. 陰影效果的影響
- 19. ListView中的setOnItemClickListener影響多行
- 20. 對精靈的多重影響
- 21. Linux:信號對多線程的影響
- 22. KeywordTokenizer對多值字段的影響
- 23. 多秀()和隱藏()的影響
- 24. ListView控件的onclick影響多行
- 25. glsl對低多面表面的影響
- 26. 的iOS:HMGLTransition影響
- 27. 影響MySQL的
- 28. HTML5的影響,
- 29. TYPE_INT_ARGB_PRE的影響
- 30. C++ toUpper實現
你應該嘗試使用ToUpperInvariant()作爲ToUpper的()是文化敏感。 – ram 2010-03-23 14:39:47