Ich arbeite an einem C++ Projekt (mit VS2008
), wo ich eine sehr große XML-Datei in std::wstring
aus einer Datei laden muss. Derzeit wird die folgende Zeile reserviert Speicher, bevor die Daten geladen:Was ist der schnellste Weg, die Größe von std :: string zu ändern?
//std::wstring str;
//size_t ncbDataSz = file size in bytes
str.resize(ncbDataSz/sizeof(WCHAR));
Aber mein aktuelles Problem ist, dass die resize
Methode für eine größere Stringgröße etwas lange Zeit in Anspruch nimmt (Getestet habe ich es nur mit 3 GB Daten in einem x64
Projekt, auf einem Desktop-PC mit 12GB
von freiem RAM und es dauerte etwa 4-5 Sekunden zu vervollständigen.)
Also ich bin gespannt, gibt es eine schnellere (optimierte) Methode zur Größenänderung std::string
? Ich frage nur nach Windows.
'std :: string :: reserve' reserven,' std :: string :: resize' schreibt auch in den speicher ... was du willst überschreiben mittelbar, nehme ich an. – LogicStuff
Möchten Sie die Größe ändern oder reservieren? – user463035818
@LogicStuff: 'reserve' ist ein seltsames Biest. Es "reserviert" den Speicher, aber man kann nicht direkt darauf als zusammenhängendes Byte-Array zugreifen, richtig? Ich muss 'append' darauf ansprechen. In diesem Fall ist es für mich nutzlos für diese Typoptimierung. – c00000fd