diff --git a/Terminal.Gui/Text/StringExtensions.cs b/Terminal.Gui/Text/StringExtensions.cs index a40143af8..3167bcf30 100644 --- a/Terminal.Gui/Text/StringExtensions.cs +++ b/Terminal.Gui/Text/StringExtensions.cs @@ -125,10 +125,8 @@ public static class StringExtensions public static string ToString (IEnumerable runes) { const int maxCharsPerRune = 2; - // Max stackalloc ~2 kB - const int maxStackallocTextBufferSize = 1048; + const int maxStackallocTextBufferSize = 1048; // ~2 kB - Span runeBuffer = stackalloc char[maxCharsPerRune]; // Use stackalloc buffer if rune count is easily available and the count is reasonable. if (runes.TryGetNonEnumeratedCount (out int count)) { @@ -144,10 +142,8 @@ public static class StringExtensions Span remainingBuffer = textBuffer; foreach (Rune rune in runes) { - int charsWritten = rune.EncodeToUtf16 (runeBuffer); - ReadOnlySpan runeChars = runeBuffer [..charsWritten]; - runeChars.CopyTo (remainingBuffer); - remainingBuffer = remainingBuffer [runeChars.Length..]; + int charsWritten = rune.EncodeToUtf16 (remainingBuffer); + remainingBuffer = remainingBuffer [charsWritten..]; } ReadOnlySpan text = textBuffer[..^remainingBuffer.Length]; @@ -157,6 +153,7 @@ public static class StringExtensions // Fallback to StringBuilder append. StringBuilder stringBuilder = new(); + Span runeBuffer = stackalloc char[maxCharsPerRune]; foreach (Rune rune in runes) { int charsWritten = rune.EncodeToUtf16 (runeBuffer);