它是有效的(还是必要的)?使StringBuilder成为类的成员,并在要进行字符串连接时在类方法中使用它?
还是在这样的操作之前使用新的StringBuidler()?
我怀疑如果有一个可以在那里使用的StringBuilder,那么它是有效的。
兴
发布于 2015-12-10 12:08:04
这是一个有趣的问题,也是一个研究问题。
答案是,是,在极端的测试条件下,与每次创建一个新的StringBuilder相比,共享单个实例并重用它更有效。
但是,没有,这几乎是不必要的,而且在大多数情况下可能是个坏主意。其他的考虑因素,如线程安全,通常比过早的微优化更重要。
来自链接物品的以下代码进行了高度人为的性能测试:
using System;
using System.Diagnostics;
using System.Text;
class Program
{
static string Method1()
{
StringBuilder builder = new StringBuilder();
foreach (string value in _array)
builder.Append(value);
return builder.ToString();
}
static StringBuilder _builder = new StringBuilder();
static string Method2()
{
StringBuilder builder = _builder;
builder.Clear();
foreach (string value in _array)
builder.Append(value);
return builder.ToString();
}
static string[] _array = { "dot", "net", "perls", "string", "array" };
const int _max = 1000000;
static void Main()
{
Method1();
Method2();
// Version 1: use new StringBuilder each time.
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
Method1();
}
s1.Stop();
// Version 2: reuse a single StringBuilder instance.
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
Method2();
}
s2.Stop();
Console.WriteLine(s1.Elapsed.TotalMilliseconds);
Console.WriteLine(s2.Elapsed.TotalMilliseconds);
Console.Read();
}
}结果(我刚刚亲自运行):
https://stackoverflow.com/questions/34201146
复制相似问题