在网络应用程序中,我正在拆分字符串并分配给链接名称或字符串集合。将 stringbuilder 用于 Web 应用程序是否有显着的性能优势?
编辑:2 个功能:将链接拆分为 5-10 个字符串。然后重新打包成另一个字符串。此外,每次单击链接时,我都会一次将一个字符串附加到链接。
在网络应用程序中,我正在拆分字符串并分配给链接名称或字符串集合。将 stringbuilder 用于 Web 应用程序是否有显着的性能优势?
编辑:2 个功能:将链接拆分为 5-10 个字符串。然后重新打包成另一个字符串。此外,每次单击链接时,我都会一次将一个字符串附加到链接。
您将连接多少个字符串?你确定会有多少,还是取决于数据库中有多少记录等?
有关更多详细信息和指南,请参阅我关于此主题的文章 - 但基本上,在 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 更有效(对于中到大的数字)。
是的,连接常规字符串很昂贵(实际上将字符串附加到另一个字符串的末尾)。每次更改字符串时,.net 都会删除旧字符串并使用新值创建一个新字符串。它是一个不可变的对象。
编辑:
Stringbuilder 应谨慎使用,并像任何其他方法一样进行评估。有时将两个字符串连接在一起会更有效,应根据具体情况进行评估。
你应该看看Jon Skeet的这篇关于连接字符串的优秀文章。
为什么 Web 应用程序或 winforms 应用程序的性能会有所不同?
由于内存和对象分配,使用 stringbuilder 是一个很好的做法,无论您为什么构建代码,这些规则都适用。
如果您在循环中创建具有大量迭代的字符串,那么使用 stringbuilder 是一个好主意。否则,字符串连接是你最好的选择。
首先,你还在写这个应用程序吗?如果是,则停止性能调整!其次,将正确性置于速度之上。出于显而易见的原因,从长远来看,可读性更为重要。第三,我们不知道您正在编写的确切情况和代码。如果这种微优化对您的代码性能是否重要,我们无法真正告诉您。测量差异。我强烈推荐 Red Gate 的 Ants Profiler。