अब तक हमारे पास यह करने के लिए तीन प्रतिस्पर्धी विकल्प हैं:
Console.Write("\r{0} ", value); // Option 1: carriage return
Console.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);
}
मेरी मशीन पर, मुझे निम्नलिखित परिणाम मिलते हैं:
- backspaces: 25.0 सेकंड
- कैरिज रिटर्न: 28.7 सेकंड
- SetCursorPosition: 49.7 सेकंड
इसके अतिरिक्त, SetCursorPosition
ध्यान देने योग्य झिलमिलाहट का कारण बनता है कि मैंने विकल्पों में से किसी के साथ निरीक्षण नहीं किया। इसलिए, नैतिक संभव होने पर बैकस्पेस या गाड़ी के रिटर्न का उपयोग करना है , और मुझे ऐसा करने का तेज़ तरीका सिखाने के लिए धन्यवाद , अतः!
अपडेट : टिप्पणियों में, जोएल ने सुझाव दिया कि सेटरकोर्सपॉन्जन स्थानांतरित दूरी के संबंध में स्थिर है, जबकि अन्य विधियां रैखिक हैं। इसके अलावा परीक्षण की पुष्टि करता है कि यह मामला है, हालांकि निरंतर समय और धीमी गति से अभी भी धीमी है। मेरे परीक्षणों में, कंसोल के लिए बैकस्पेस की एक लंबी स्ट्रिंग लिखना लगभग 60 वर्णों तक, SetCursorPosition की तुलना में तेज़ है। इसलिए बैकस्पेस 60 वर्णों (या तो) से छोटी रेखा के भागों को बदलने के लिए तेज़ है, और यह झिलमिलाहट नहीं करता है, इसलिए मैं अपने प्रारंभिक समर्थन के आधार पर \ b over \ r और SetCursorPosition
।