diff --git a/src/host/outputStream.cpp b/src/host/outputStream.cpp index 3aa7fd5085b..cf6cdcca424 100644 --- a/src/host/outputStream.cpp +++ b/src/host/outputStream.cpp @@ -76,8 +76,15 @@ void WriteBuffer::_DefaultStringCase(const std::wstring_view string) { size_t dwNumBytes = string.size() * sizeof(wchar_t); - _io.GetActiveOutputBuffer().GetTextBuffer().GetCursor().SetIsOn(true); - + Cursor& cursor = _io.GetActiveOutputBuffer().GetTextBuffer().GetCursor(); + if (!cursor.IsOn()) + { + cursor.SetIsOn(true); + } + + // Defer the cursor drawing while we are iterating the string, for a better performance. + // We can not waste time displaying a cursor event when we know more text is coming right behind it. + cursor.StartDeferDrawing(); _ntstatus = WriteCharsLegacy(_io.GetActiveOutputBuffer(), string.data(), string.data(), @@ -87,6 +94,7 @@ void WriteBuffer::_DefaultStringCase(const std::wstring_view string) _io.GetActiveOutputBuffer().GetTextBuffer().GetCursor().GetPosition().X, WC_LIMIT_BACKSPACE | WC_DELAY_EOL_WRAP, nullptr); + cursor.EndDeferDrawing(); } ConhostInternalGetSet::ConhostInternalGetSet(_In_ IIoProvider& io) :