UYOU
到目前为止,我们有三种竞争方案可供选择:Console.Write("\r{0} ", value); // Option 1: carriage returnConsole.Write("\b\b\b\b\b{0}", value); // Option 2: backspace{ // Option 3 in two parts: Console.SetCursorPosition(0, Console.CursorTop); // - Move cursor Console.Write(value); // - Rewrite}我总是使用Console.CursorLeft = 0,第三种选择的变种,所以我决定做一些测试。这是我使用的代码:public static void CursorTest(){
int testsize = 1000000;
Console.WriteLine("Testing cursor position");
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < testsize; i++)
{
Console.Write("\rCounting: {0} ", i);
}
sw.Stop();
Console.WriteLine("\nTime using \\r: {0}", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
int top = Console.CursorTop;
for (int i = 0; i < testsize; i++)
{
Console.SetCursorPosition(0, top);
Console.Write("Counting: {0} ", i);
}
sw.Stop();
Console.WriteLine("\nTime using CursorLeft: {0}", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
Console.Write("Counting: ");
for (int i = 0; i < testsize; i++)
{
Console.Write("\b\b\b\b\b\b\b\b{0,8}", i);
}
sw.Stop();
Console.WriteLine("\nTime using \\b: {0}", sw.ElapsedMilliseconds);}在我的机器上,我得到以下结果:退格:25.0秒回车:28.7秒SetCursorPosition:49.7秒此外,SetCursorPosition引起了明显的闪烁,我没有观察到任何一种替代方案。因此,道德是尽可能使用退格或回车,并感谢教我一个更快的方法来做到这一点,所以!更新:在评论中,Joel建议SetCursorPosition相对于移动的距离是恒定的,而其他方法是线性的。进一步的测试证实了这种情况,然而恒定的时间和缓慢仍然很慢。在我的测试中,将一长串退格写入控制台比SetCursorPosition更快,直到大约60个字符。因此,退格会更快地替换短于60个字符(或左右)的部分行,并且它不会闪烁,所以我将支持我最初认可的\ b over \ r \ n和SetCursorPosition。