当前位置: 首页 > 知识库问答 >
问题:

...NET字符串连接

和魁
2023-03-14

我正在读一本书叫做。NET Gotchas(非常值得一读),它说明了String和StringBuilder之间的性能差异,它提出了一个我觉得不能没有答案的问题!虽然我不知道这两个类的内部结构(不看这些类的反射版本),但我想知道;因为运算符在。NET是可重载的,为什么微软没有实现String类来在内部使用StringBuilder并重载连接运算符来简单调用。在StringBuilder中追加()?我想有一些潜在的原因可以解释为什么情况不是这样,如果是,为什么?

共有2个答案

杜弘伟
2023-03-14

原因很简单:

是因为

string result = a + b;

它的效率比

var sb = new StringBuilder(a, a.Length + b.Length);
sb.Append(b);
string result = sb.ToString();

StringBuilder只有在发生大量连接时才有意义,通常是在循环中。

宦高岑
2023-03-14

与其说问题在于字符串串接慢,不如说是重复串接造成了很多中间字符串需要分配,后期垃圾回收。

编辑
请注意,mystring=“a”不会简单地在前面的字符串中添加“a”。它为组合创建一个新字符串,并将“mystring”指向它,从而丢弃以前的值(如果没有更多的引用)。

结束编辑

一系列

string mystring = "something";
mystring += "something else";
mystring = mystring + "third";

如果将每一行作为StringBuilder追加,后跟一个。ToString()以字符串形式返回结果。只有在使用单个StringBuilder、重复向其追加()并执行以下操作时,才能获得性能优势。最后是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";

是最快的。

 类似资料:
  • 问题内容: 我有以下代码 输出为。 Java如何完成字符串连接的技巧? 问题答案: 因为Java将表达式转换为类似 实际上,我认为它可能使用s,因此: 解决更高效 这使用“ 字符串”构建器上的方法(针对每种类型),这些方法可以正确处理

  • 本文章将介绍Thymeleaf标准表达式语法中的概念。 学习如何在Thymeleaf模板中显示对象(Bean)的属性值。 已经将类的bean已经设置为名称为的上下文模型。 为这些和属性添加一些格式,学习使用字符串相连接输出。 最后,修改模板以获得一个合理的静态原型(例如,通过一些原型数据替换并显示结果)。 如果要上机实践,请参考:Thymeleaf+SpringMVC5示例项目。这里不再重复创建项

  • Parameter Position Type Required cat Description 1 string No empty This value to catentate to the given variable. 将cat里的值连接到给定的变量后面. This value is concatenated to the given variable. 将cat里的值连接到给定的变量后面

  • 大部分数据库提供程序都需要一些固定格式的连接字符串来连接到数据库。有时候连接字符串会包含需要被保护的敏感信息。你可能还需要在应用程序在不同环境之间切换时更改连接字符串,不如开发环境、测试环境和生产环境。 .NET Framework 应用程序 像 Winform、WPF、控制台应用程序以及 ASP.NET 4 等的 .NET Framework 应用程序都会有尝试(tried)连接字符串和测试(t

  • 有趣的是,+操作符可以用于字符串,它执行字符串连接操作。连接是指将字符串首尾相连。例如: apstring fruit = "banana"; apstring bakedGood = " nut bread"; apstring dessert = fruit + bakedGood; cout << dessert << endl; 这个程序的输出是: banana nut bread。 不

  • 本文向大家介绍Visual Basic .NET字符串插值,包括了Visual Basic .NET字符串插值的使用技巧和注意事项,需要的朋友参考一下 示例 此新功能使字符串连接更易读。该语法将被编译为其等效String.Format调用。 没有字符串插值: 使用字符串插值: 这两行是等效的,并且都被编译为对的调用String.Format。 与中的一样String.Format,方括号可以包含任