[英]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.