CSI_SetVsAppend.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Text;
  2. using BenchmarkDotNet.Attributes;
  3. using Tui = Terminal.Gui;
  4. namespace Terminal.Gui.Benchmarks.ConsoleDrivers.EscSeqUtils;
  5. /// <summary>
  6. /// Compares the Set and Append implementations in combination.
  7. /// </summary>
  8. /// <remarks>
  9. /// A bit misleading because *CursorPosition is called very seldom compared to the other operations
  10. /// but they are very similar in performance because they do very similar things.
  11. /// </remarks>
  12. [MemoryDiagnoser]
  13. [BenchmarkCategory (nameof (Tui.EscSeqUtils))]
  14. // Hide useless empty column from results.
  15. [HideColumns ("stringBuilder")]
  16. public class CSI_SetVsAppend
  17. {
  18. [Benchmark (Baseline = true)]
  19. [ArgumentsSource (nameof (StringBuilderSource))]
  20. public StringBuilder Set (StringBuilder stringBuilder)
  21. {
  22. stringBuilder.Append (Tui.EscSeqUtils.CSI_SetBackgroundColorRGB (1, 2, 3));
  23. stringBuilder.Append (Tui.EscSeqUtils.CSI_SetForegroundColorRGB (3, 2, 1));
  24. stringBuilder.Append (Tui.EscSeqUtils.CSI_SetCursorPosition (4, 2));
  25. // Clear to prevent out of memory exception from consecutive iterations.
  26. stringBuilder.Clear ();
  27. return stringBuilder;
  28. }
  29. [Benchmark]
  30. [ArgumentsSource (nameof (StringBuilderSource))]
  31. public StringBuilder Append (StringBuilder stringBuilder)
  32. {
  33. Tui.EscSeqUtils.CSI_AppendBackgroundColorRGB (stringBuilder, 1, 2, 3);
  34. Tui.EscSeqUtils.CSI_AppendForegroundColorRGB (stringBuilder, 3, 2, 1);
  35. Tui.EscSeqUtils.CSI_AppendCursorPosition (stringBuilder, 4, 2);
  36. // Clear to prevent out of memory exception from consecutive iterations.
  37. stringBuilder.Clear ();
  38. return stringBuilder;
  39. }
  40. public static IEnumerable<object> StringBuilderSource ()
  41. {
  42. return [new StringBuilder ()];
  43. }
  44. }