Как сбросить / очистить до std :: wstring? - PullRequest
0 голосов
/ 28 октября 2010

Как сбросить / очистить в std :: wstring?

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

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

Любая идея, как решитьэто?

1 Ответ

0 голосов
/ 28 октября 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...