Console.Writeline切断大输出C#

时间:2016-03-17 14:54:20

标签: c#

我只是想向控制台输出大量日期。这是我的代码......

Main:

    TaskResult tr = task.ExecuteCheck();
          Console.WriteLine(task.Name + "....");
          Console.WriteLine(tr.Result);
          Console.WriteLine();
          Console.ReadLine();


ExecuteCheck
 TaskResult tr =new TaskResult();

            StringBuilder sb = new StringBuilder();
            sb.AppendLine(GetAlotOfData);
             sb.AppendLine(GetSomemoreData);
      tr.Result=sb.ToString();
            return tr;

当我运行此操作时,控制台窗口仅显示数据的最后部分,尽管tr.Result已正确填充所有数据。我以前从未见过这种行为。知道这里会发生什么吗?

更新:

Console.BufferHeight = Int16.MaxValue - 1; 

似乎要显示数据,但现在滚动条很难用。你几乎没有移动它,一切都在屏幕外

如何优化?

2 个答案:

答案 0 :(得分:1)

控制台仅保留有限的记录缓冲区。它在内存中最多保留Console.BufferHeight行和Console.BufferWidth列。如果你的字符串太宽而不适合宽度,或者你做了一个NewLine它将它包装到第二行。填充BufferHeight行后,它会开始删除最旧的行。

您可以通过将自己的值分配给Console.BufferHeight来调整缓冲区高度,最大允许值为

Console.BufferHeight = Int16.MaxValue - 1;

您可能执行的优化是在每次写入控制台后检查Console.CursorTop,这将告诉您哪个"行"你是在。一旦达到某个限制,就可以动态增长缓冲区。

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Some Stuff");
        GrowConsole();
    }

    const double TriggerGrowthPercentage = .90;
    const double GrowthPercentage = 1.25;
    private static void GrowConsole()
    {
        if (((double)Console.CursorTop)/Console.BufferHeight <= TriggerGrowthPercentage)
        {
            int growth = (int)(Console.BufferHeight*GrowthPercentage);
            growth = Math.Max(growth, 1); //Grow at least by 1;
            growth = Math.Min(growth, Int16.MaxValue - 1); //Don't grow bigger than Int16.MaxValue - 1;
            Console.BufferHeight = growth;
        }
    }

在上面的例子中,一旦光标移动到缓冲区大小的90%,它将使缓冲区增长125%的当前大小。

答案 1 :(得分:0)

更改控制台缓冲区高度:

Console.BufferHeight = Int16.MaxValue - 1;

还尝试设置控制台窗口高度以使其更具可读性:

Console.WindowHeight = Console.LargestWindowHeight;