2010-10-28 3 views
0

Как сбросить/опорожнить std :: wstring?Как сбросить/опорожнить std :: wstring?

Кажется, что моя функция делает задержку при использовании этих строк:

std::wstring currentUrl; // <--- I declare this as global. 
currentUrl = _bstr_t(url->bstrVal); 

Любой идея, как я могу решить эту проблему?

ответ

0

Как вы измерили эту задержку? Единственный надежный способ - через профилировщик, и профилировщик также покажет вам, как это время было потрачено.

Это говорит о том, что при назначении строки часто (если только строка не может повторно использовать свой старый буфер или небольшие оптимизации оптимизации строки), требуется удаление старого буфера и выделение нового буфера. И динамическая память медленная.

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

Однако, как и всегда с проблемами производительности, вам необходимо измерить с помощью профилировщика. Угадание вас не заставит.

Смежные вопросы