我正在阅读一本名为.NET Gotchas(非常值得一读的IMO),它说明了String和StringBuilder之间的性能差异,并提出了一个问题,觉得无法解答!我不知道任何一个班级的内部情况(没有查看这些班级的反映版本),我想知道;因为.NET中的运算符是可重载的,为什么Microsoft没有实现String类来在内部使用StringBuilder并重载连接运算符来简单地在StringBuilder中调用.Append()?我猜测有一些潜在的原因,为什么不是这样,如果是这样,为什么?.NET字符串连接(+&+ =)与StringBuilder
5
A
回答
6
问题不在于字符串连接速度慢,而在于重复连接创建了大量需要分配并随后进行垃圾回收的中间字符串。
编辑
注意mystring += "a"
并不简单的添加“A”到以前的字符串。它为组合创建一个新的字符串,并将“mystring”指向它,从而丢弃以前的值(如果没有更多的引用)。
编辑完
,如果你做的每个单独行一个StringBuilder追加后面是的ToString一系列
string mystring = "something";
mystring += "something else";
mystring = mystring + "third";
将执行速度较慢()来获得结果回来的字符串。如果您使用单个StringBuilder,重复执行Append()并最后执行.ToString(),则只会获得性能优势。
StringBuilder sb = new StringBuilder();
sb.Append("something");
sb.Append("something else");
sb.Append("third");
string mystring = sb.ToString();
然后一个StringBuilder有它自己的开销,所以如果你有少量的字符串部分加入它将不会使你受益。
注意,编译器在单个语句优化掉的连接:
string mystring = "something" + "something else" + "third";
是最快的。
5
原因很简单:
因为
string result = a + b;
比
var sb = new StringBuilder(a, a.Length + b.Length);
sb.Append(b);
string result = sb.ToString();
StringBuilder
更有效唯一让当很多级联的正在发生意义上,通常在一个循环中。
相关问题
- 1. Sybase ODBC连接字符串与.net
- 2. Informix .NET连接字符串
- 3. .NET StringBuilder和逐字字符串文字
- 4. .Net PostgreSQL连接字符串
- 5. 字符串连接和线程在.NET
- 6. 无法使用StringBuilder来连接字符转换为字符串
- 7. Android StringBuilder与字符串串联
- 8. 字符串与sprintf连接
- 9. 更改连接字符串在C#.NET
- 10. 使用StringBuilder将字符串的ArrayList连接成一个字符串
- 11. ADO中的连接字符串。 Net
- 12. Informix for .NET的连接字符串
- 13. Mysql .NET连接字符串错误
- 14. 连接字符串问题Oracle .Net
- 15. 连接字符串在C#.NET
- 16. 在C#中使用字符串连接的字符串连接
- 17. 我应该使用StringBuilder来连接两个大字符串吗?
- 18. StringBuilder使用比字符串连接更多的内存吗?
- 19. 性能StringBuilder插入字符串与字符串Concat
- 20. 字符串与StringBuilder编辑长字符串时?
- 21. 连接字符串
- 22. 固定数量的.NET字符串连接
- 23. 连接字符串与蔚蓝与android
- 24. 连接字符串
- 25. Asp .net Web配置文件连接字符串与安全
- 26. .NET - 连接字符串:内部与外部IP
- 27. .NET连接到oracle连接字符串的问题
- 28. 连接字符串为c#.net到mysql数据库连接
- 29. C#.NET连接字符串无法连接
- 30. 连接字符串