It depends on which operations you do most often on the string.
One problem can be the way std::string is implemented: just try another STL implementation, like
stlport[
^]
They use reference counted string, thus removing lot of buffer copy.
Another can be the fact you do frequent insertion and deletion in the middle of the strings.
If so, string (that is: a buffer of memory-consecutive characters) is not as efficient.
Try
std::rope [
^]instead .
A discussion about the difference can be found
here[
^]