这不是过早优化本身的问题。一般来说,在垃圾收集器和内存中,几百个操作(许多可能被复制)对程序有什么作用,主要是关于字符串的不变性?多个.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. jQuery单击函数影响多个div
- 2. UICollectionViewCell IBAction影响多个单元格
- 3. SaveChanges影响多个存储库
- 4. Scripting.Dictionary性能受多个进程影响
- 5. 来自多个来源的jQuery动画 - 影响多个对象
- 6. StreamReader影响多少内存
- 7. toupper tolower
- 8. Klout中的影响者和影响力
- 9. 如何将多个动态元件的一个元件影响
- 10. 影响同一个ID的多个元素?
- 11. Linux:信号对多线程的影响
- 12. 对精灵的多重影响
- 13. glsl对低多面表面的影响
- 14. 的iOS:HMGLTransition影响
- 15. HTML5的影响,
- 16. TYPE_INT_ARGB_PRE的影响
- 17. 影响MySQL的
- 18. 影响
- 19. 影响
- 20. 影响
- 21. 影响
- 22. 影响
- 23. 影响
- 24. 影响
- 25. 影响
- 26. 具有多个字段的表的性能影响
- 27. Lucene中多个字段的重复值的影响
- 28. 如何影响具有相同值的多个键的对象
- 29. 影响与Baobab反应的多个组件的状态
- 30. 功能影响页面上的多个选项卡 - jQuery的
你应该尝试使用ToUpperInvariant()作为ToUpper的()是文化敏感。 – ram 2010-03-23 14:39:47