繁体   English   中英

Console.Writeline切断大输出C#

[英]Console.Writeline Cutting Off Large Output 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; 

似乎可以显示数据,但是现在滚动条使用起来很麻烦。 您几乎不移动它,一切都在屏幕外

如何进行优化?

控制台仅保留有限的记录缓冲区。 它在内存中最多保留Console.BufferHeight行和Console.BufferWidth列。 如果您的字符串太宽而无法容纳宽度,或者您进行了换行,则将其包装到第二行。 填写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%。

更改控制台缓冲区的高度:

Console.BufferHeight = Int16.MaxValue - 1;

另外,请尝试设置控制台窗口的高度,以使其更具可读性:

Console.WindowHeight = Console.LargestWindowHeight;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM