diff --git a/src/renderer/vt/state.cpp b/src/renderer/vt/state.cpp index 05dab05e153..485e7dab01c 100644 --- a/src/renderer/vt/state.cpp +++ b/src/renderer/vt/state.cpp @@ -50,7 +50,10 @@ VtEngine::VtEngine(_In_ wil::unique_hfile pipe, _deferredCursorPos{ INVALID_COORDS }, _inResizeRequest{ false }, _trace{}, - _bufferLine{} + _bufferLine{}, + _buffer{}, + _formatBuffer{}, + _conversionBuffer{} { #ifndef UNIT_TESTING // When unit testing, we can instantiate a VtEngine without a pipe. @@ -146,8 +149,11 @@ VtEngine::VtEngine(_In_ wil::unique_hfile pipe, { try { - const auto converted = ConvertToA(CP_UTF8, wstr); - return _Write(converted); + // We're likely going to be converting a ton of strings, so we'll use + // a buffer string stored on this class so we don't end up alloc/freeing + // in a tight loop and wasting a bunch of time and energy on that. + ConvertToA(CP_UTF8, wstr, _conversionBuffer); + return _Write(_conversionBuffer); } CATCH_RETURN(); } diff --git a/src/renderer/vt/vtrenderer.hpp b/src/renderer/vt/vtrenderer.hpp index 25953189c3c..c093042540d 100644 --- a/src/renderer/vt/vtrenderer.hpp +++ b/src/renderer/vt/vtrenderer.hpp @@ -113,6 +113,7 @@ namespace Microsoft::Console::Render std::string _buffer; std::string _formatBuffer; + std::string _conversionBuffer; TextAttribute _lastTextAttributes;