我正在从一个项目列表中构建一个大字符串。每个项目都会生成一个大约200个字符长(正负100%)的字符串。
使用
可以获得(明显的)性能优势吗?Dim sb = New StringBuilder(averageCharacterCount * items.Count)
而不是
Dim sb = New StringBuilder()
即使指定的容量只是一个猜测?
答案 0 :(得分:4)
我会猜测前者,因为它有助于最大限度地减少重新分配,但我猜这种差异是微不足道的(我们称之为“micro optimization”),因为这甚至不太可能成为瓶颈。但只有您可以回答哪些肯定会根据您的具体用例提供更好的性能。如果你真的想知道,可以两种方式编写代码,测量每个代码的性能,你就会得到明确的答案。
答案 1 :(得分:2)
从正确的球场开始将节省一些重新分配/副本,但请注意,由于它是一个加倍算法,它将很快接近大小。如果它在100%之内,那么对于最坏的情况只有一次重新分配/复制,那么是 - 从该方法开始将有助于一些。
但在很多方面都是微优化;你已经以正确的方式做到了,所以除非我们的分析显示这仍然是仍然瓶颈(因此你需要挤出最后几个循环的广告),忘掉它并继续下一件事
答案 2 :(得分:0)
您很可能会看到一些改进,因为该类不必重新分配和复制其项目多次。你需要进行分析才能确定这对你有多大帮助,但由于这是一个简单的改变,我没有理由不这样做。
答案 3 :(得分:0)
除非这是你的应用程序唯一的功能,否则你不会注意到。
答案 4 :(得分:0)
如果您有字符串列表,那么使用String.Concat
代替StringBuilder
可以获得更好的效果。