我只是想向控制台输出大量日期。这是我的代码......
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;
似乎要显示数据,但现在滚动条很难用。你几乎没有移动它,一切都在屏幕外
如何优化?
答案 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;