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