এটি করার জন্য এখন পর্যন্ত আমাদের কাছে তিনটি প্রতিযোগী বিকল্প রয়েছে:
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);
}
আমার মেশিনে, আমি নিম্নলিখিত ফলাফলগুলি পেয়েছি:
- ব্যাকস্পেস: 25.0 সেকেন্ড
- ক্যারেজ রিটার্নস: 28.7 সেকেন্ড
- সেটকার্সার অবস্থান: 49.7 সেকেন্ড
অতিরিক্তভাবে, SetCursorPosition
লক্ষণীয় ঝাঁকুনির কারণে আমি বিকল্পগুলির সাথে কোনটি পর্যবেক্ষণ করি নি। সুতরাং, নৈতিকটি হ'ল সম্ভব হলে ব্যাকস্পেস বা গাড়ীর ফেরত ব্যবহার করা এবং আমাকে এটির দ্রুততর উপায় শেখানোর জন্য ধন্যবাদ , তাই!
আপডেট : মন্তব্যে, জোল পরামর্শ দেয় যে সেট পদ্ধতিগুলি অন্য পদ্ধতিগুলি লিনিয়ার থাকাকালীন সরানো দূরত্বের বিষয়ে ধ্রুবক। পরবর্তী পরীক্ষা নিশ্চিত করে যে এটি ক্ষেত্রে এটি তবে ধ্রুবক সময় এবং ধীর এখনও ধীর। আমার পরীক্ষাগুলিতে, কনসোলটিতে ব্যাকস্পেসের দীর্ঘ স্ট্রিং লেখা কোথাও প্রায় 60 টি অক্ষর না হওয়া পর্যন্ত সেটকার্সর অবস্থানের চেয়ে দ্রুত। সুতরাং ব্যাকস্পেসটি 60 টির চেয়ে কম অক্ষরের (বা তাই) লাইনের অংশগুলি প্রতিস্থাপনের জন্য দ্রুত এবং এটি ঝাঁকুনি দেয় না, তাই আমি initial b ওভার \ আর এর প্রাথমিক অনুমোদনের পাশে দাঁড়াতে যাচ্ছি SetCursorPosition
।