2

在网络应用程序中,我正在拆分字符串并分配给链接名称或字符串集合。将 stringbuilder 用于 Web 应用程序是否有显着的性能优势?

编辑:2 个功能:将链接拆分为 5-10 个字符串。然后重新打包成另一个字符串。此外,每次单击链接时,我都会一次将一个字符串附加到链接。

4

6 回答 6

12

您将连接多少个字符串?你确定会有多少,还是取决于数据库中有多少记录等?

有关更多详细信息和指南,请参阅我关于此主题的文章 - 但基本上,在 Web 应用程序中与使用 StringBuilder 相比,字符串连接的成本是多少没有区别。

编辑:恐怕从这个问题中你仍然不能完全清楚你在做什么。如果您有一组固定的字符串要连接,并且您可以一次完成所有操作,那么使用连接会更快并且可能更具可读性。例如:

string faster = first + " " + second + " " + third + "; " + fourth;

string slower = new StringBuilder().Append(first)
                                   .Append(" ")
                                   .Append(second)
                                   .Append(" ")
                                   .Append(third)
                                   .Append("; ")
                                   .Append(fourth)
                                   .ToString();

当然,另一种选择是使用格式字符串。这可能是最慢但最易读的:

 string readable = string.Format("{0} {1} {2}; {3}",
                                 first, second, third, fourth);

您的问题中提到“每次添加链接”的部分建议在该方面使用 StringBuilder - 任何自然导致循环的东西都使用 StringBuilder 更有效(对于中到大的数字)。

于 2009-01-22T21:51:32.620 回答
4

是的,连接常规字符串很昂贵(实际上将字符串附加到另一个字符串的末尾)。每次更改字符串时,.net 都会删除旧字符串并使用新值创建一个新字符串。它是一个不可变的对象。

编辑:

Stringbuilder 应谨慎使用,并像任何其他方法一样进行评估。有时将两个字符串连接在一起会更有效,应根据具体情况进行评估。

Atwood 有一篇与此相关的有趣文章。

于 2009-01-22T21:49:53.030 回答
4

你应该看看Jon Skeet的这篇关于连接字符串的优秀文章。

于 2009-01-22T21:52:06.770 回答
2

为什么 Web 应用程序或 winforms 应用程序的性能会有所不同?

由于内存和对象分配,使用 stringbuilder 是一个很好的做法,无论您为什么构建代码,这些规则都适用。

于 2009-01-22T21:50:42.997 回答
2

如果您在循环中创建具有大量迭代的字符串,那么使用 stringbuilder 是一个好主意。否则,字符串连接是你最好的选择。

于 2009-01-22T21:55:23.910 回答
1

首先,你还在写这个应用程序吗?如果是,则停止性能调整!其次,将正确性置于速度之上。出于显而易见的原因,从长远来看,可读性更为重要。第三,我们不知道您正在编写的确切情况和代码。如果这种微优化对您的代码性能是否重要,我们无法真正告诉您。测量差异。我强烈推荐 Red Gate 的 Ants Profiler。

于 2009-01-22T22:27:11.643 回答