diff --git a/Benchmarks/Text/StringExtensions/ToStringEnumerable.cs b/Benchmarks/Text/StringExtensions/ToStringEnumerable.cs
new file mode 100644
index 000000000..43eef23ce
--- /dev/null
+++ b/Benchmarks/Text/StringExtensions/ToStringEnumerable.cs
@@ -0,0 +1,70 @@
+using System.Text;
+using BenchmarkDotNet.Attributes;
+using Tui = Terminal.Gui;
+
+namespace Terminal.Gui.Benchmarks.Text.StringExtensions;
+
+///
+/// Benchmarks for performance fine-tuning.
+///
+[MemoryDiagnoser]
+public class ToStringEnumerable
+{
+
+ ///
+ /// Benchmark for previous implementation.
+ ///
+ [Benchmark]
+ [ArgumentsSource (nameof (DataSource))]
+ public string Previous (IEnumerable runes, int size)
+ {
+ return StringAppendInLoop (runes);
+ }
+
+ ///
+ /// Benchmark for current implementation with rune chars appending to StringBuilder.
+ ///
+ ///
+ ///
+ [Benchmark (Baseline = true)]
+ [ArgumentsSource (nameof (DataSource))]
+ public string Current (IEnumerable runes, int size)
+ {
+ return Tui.StringExtensions.ToString (runes);
+ }
+
+ ///
+ /// Previous implementation with string append in a loop.
+ ///
+ private static string StringAppendInLoop (IEnumerable runes)
+ {
+ var str = string.Empty;
+
+ foreach (Rune rune in runes)
+ {
+ str += rune.ToString ();
+ }
+
+ return str;
+ }
+
+ public IEnumerable