Console.Write(i)在每个for或者Console.write(Stringbuilder)的最后哪一个更好

时间:2015-06-17 04:23:57

标签: c# console

最后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);
}

1 个答案:

答案 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和字符串连接在这里不适用。