Console.Write(i)
或for
中的 Console.Write(StringBuilder)
:哪一个更好?
我有两个功能,第一个在for循环中打印,另一个在最后打印。
public static void checkmethod1(int value, Checkevent text)
{
Stopwatch stopwatch2 = new Stopwatch();
stopwatch2.Start();
StringBuilder builder = new StringBuilder();
switch (text)
{
case Checkevent.odd:
for (int i = 1; i <= value; i = i + 2)
{
builder.Append(i).Append(" ");
}
break;
case Checkevent.even:
for (int i = 2; i <= value; i = i + 2)
{
builder.Append(i).Append(" ");
}
break;
}
stopwatch2.Stop();
Console.WriteLine(builder);
Console.WriteLine("{0}", stopwatch2.Elapsed);
}
功能2:
public static void checkmethod3(int value, Checkevent text)
{
Stopwatch stopwatch2 = new Stopwatch();
stopwatch2.Start();
switch (text)
{
case Checkevent.odd:
for (int i = 1; i <= value; i = i + 2)
{
Console.Write(i);
}
break;
case Checkevent.even:
for (int i = 2; i <= value; i = i + 2)
{
Console.Write(i);
}
break;
}
stopwatch2.Stop();
Console.Write("{0}", stopwatch2.Elapsed);
}
答案 0 :(得分:3)
在这个特定场景中,我更喜欢StringBuilder
因为循环没有花费大量时间来改变用户体验。 StringBuilder通常需要更少的内存,您将获得更好的性能。当您对字符串中的每个修改新string
对象进行创建,但StringBuilder
不是这样。
第一种方法只执行Console.Write
一次,但第二种方法将执行次 for
循环迭代。这将使第二个缓慢。
如果您希望在用户看到文本时向用户显示文本,因为看起来您正在显示日志以查看流程,然后显示一次(使用StringBuilder
)可能无法提供用户机会阅读它。在这种情况下,您将使用Console.Write(string)
生成写入日志。
当您了解两者的工作原理时,决定何时使用string
以及何时使用StringBuilder
可能会变得简单。他们的重要行为之一就是如下。
Using the StringBuilder Class in the .NET Framework
String对象是不可变的。每次使用其中一种方法 在System.String类中,您在内存中创建一个新的字符串对象, 这需要为该新对象重新分配空间。在 您需要对a执行重复修改的情况 string,与创建新String对象相关的开销可以 很贵。您可以使用System.Text.StringBuilder类 想要在不创建新对象的情况下修改字符串。例如, 使用StringBuilder类可以在连接时提高性能 许多字符串在一个循环中。
修改强>
我使用三个值100,10000和100000测试上述两种方法,并且使用的机器具有以下规格
Operating System: Windows 7 Enterprise and CPU
Processor: Intel(R) Core (TM) i5-3570 CPU @ 3.40 GHz 3.40 GHz
Installed memory (RAM): 8.00 GB
System Type: 64 bit Operating System
价值100
时间与 StringBuilder 00:00:00.0000184
时间没有 StringBuilder 00:00:00.0037037
价值10000
时间 StringBuilder 00:00:00.0013233
时间没有 StringBuilder 00:00:00.2970272
价值100000
时间 StringBuilder 00:00:00.0133015
时间没有 StringBuilder 00:00:02.5853375
在第一种使用StringBuilder
的方法中,Console.Write
仅执行一次,但在其他情况下,它执行次数与循环迭代次数相同。这使得第二个变慢。 比较StringBuilder和字符串连接在这里不适用。