2010-10-28 206 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::wstringconst wchar_t*,所以我認爲這是後者。如果是這種情況,字符串不知道它將被分配的字符串的大小,所以如果字符串很大,它可能不得不遞增地增加它的緩衝區,這又涉及分配和釋放以及複製字符,所以這個可能相當昂貴。
您可以嘗試使用成員函數assign()而不是賦值運算符。我認爲有assign()的過載需要const wchar_t*和字符串的大小,以便它能夠事先知道確切的緩衝區大小。

但是,與性能問題一樣,您需要使用分析器進行測量。猜測不會讓你走遠。