Как вы измерили эту задержку? Единственный надежный способ - через профилировщик, и профилировщик также покажет вам, как это время было потрачено.
Это говорит о том, что при назначении строки часто (если только строка не может повторно использовать свой старый буфер или небольшие оптимизации оптимизации строки), требуется удаление старого буфера и выделение нового буфера. И динамическая память медленная.
Я не знаю _bstr_t
, но так как std::wstring
имеет только операторы присваивания для назначения другого std::wstring
и const wchar_t*
, я предполагаю, что это последний. Если это так, строка не знает размер строки, которую он получит, поэтому, если строка велика, ей может потребоваться постепенное увеличение своего буфера, что опять же связано с распределением и освобождением плюс копирование символов, поэтому это может быть довольно дорогостоящим.
Вы можете попытаться использовать функцию-член assign()
вместо оператора присваивания. Я думаю, что есть перегрузка assign()
, которая принимает const wchar_t*
и размер строки, позволяя ему знать размер точного буфера заранее.
Однако, как и всегда с проблемами производительности, вам необходимо измерить с помощью профилировщика. Угадание вас не заставит.