2010-10-28 40 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*和字符串的大小,以便它能够事先知道确切的缓冲区大小。

但是,与性能问题一样,您需要使用分析器进行测量。猜测不会让你走远。

相关问题