2010-10-28 6 views
0

Comment réinitialiser/vider dans un std :: wstring?Comment réinitialiser/vider dans un std :: wstring?

Il semble que ma fonction fait un retard lors de l'utilisation de ces lignes:

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

Toute idée comment puis-je résoudre ce problème?

Répondre

0

Comment avez-vous mesuré ce délai? Le seul moyen fiable consiste à utiliser un profileur, et un profileur vous montrera également comment ce temps a été dépensé. Cela dit, affecter une chaîne à une chaîne (à moins que la chaîne puisse réutiliser son ancienne optimisation de tampon ou de petite chaîne) implique souvent la suppression de l'ancien tampon et l'allocation d'un nouveau tampon. Et la mémoire dynamique est lente.

Je ne sais pas _bstr_t, mais depuis std::wstring n'ont que des opérateurs d'affectation à attribuer à un autre std::wstring et const wchar_t*, je suppose que c'est celle-ci. Si tel est le cas, la chaîne ne connaît pas la taille de la chaîne à laquelle elle sera affectée, donc si la chaîne est grande, elle devra augmenter progressivement sa mémoire tampon, ce qui implique à nouveau l'allocation et la désallocation plus des caractères de copie. pourrait être assez cher.
Vous pouvez essayer d'utiliser une fonction membre assign() au lieu de l'opérateur d'affectation. Je pense qu'il y a une surcharge de assign() qui prend un const wchar_t* et la taille de la chaîne, ce qui lui permet de connaître la taille exacte de la mémoire tampon à l'avance. Toutefois, comme toujours avec des problèmes de performances, vous devez mesurer à l'aide d'un profileur. Deviner ne vous mènera pas loin.

Questions connexes