performance von delete steigern



  • Hi,

    ich habe eine Hashmap (std::map), die als Werte Pointer enthält, die wieder auf eine Hashmap zeigen. Das funktioniert auch alles wunderbar, beim freigeben des Speichers ist die Anwendung aber recht langsam.

    Die Hashmap, die wieder Pointer auf die anderen Hashmaps enthält sieht folgendermaßen aus:

    std::map<TCHAR*, std::map<DWORD64, TCHAR*>*, cmp_str>
    

    die Hashmaps auf die die Pointer zeigen sehen dann entsprechned so aus:

    std::map<DWORD64, TCHAR*>
    

    beim freigeben des speichers gehe ich dann die erste Hashmap durch und rufe delete auf:

    for ( moduleIter = symMap.begin() ; moduleIter != symMap.end(); moduleIter++ )
    {
        // delete module name
        delete (*moduleIter).first;
        // delete symbol map
        delete (*moduleIter).second;
    }
    

    das geht verhältnismäßig langsam, ein Beispiel:

    Hashmap (symMap) enthält 3 Zeiger auf weitere Hashmaps. Diese 3 Hashmaps enthalten: 893 bzw. 7811 bzw. 3687 Einträge, also ingesamt 12391 Einträge.
    Der oben gezeigte Schnipsel zur Freigabe des Speichers dauert ca. 22 Sekunden. Die Verarbeitung davor eben nur 5 Sekunden...mache ich irgendeinen gravierenden performance fehler? Irgendwelche tipps zur Verbesserung?

    Grüße



  • Hallo,

    welchen compiler verwendest du?
    Testest Du mit einer Debug version? Falls ja probier mal die release.

    Bei der Verwendung von stl und (unabhängig davon) bei delete sind die debug versionen meist deutlich langsamer.



  • Danke! das hat echt einen massiven performancegewinn gebracht, die 22 sekunden sind runter auf 500ms 😮
    Hätte ich echt nicht gedacht, dass das so viel bringt!



  • doch gerade bei der STL bringt das so einiges 🙂



  • jepp ich hab auch oft überall optimiert bei meinen code, war alles bullshit.. bei release geht ab;)


Anmelden zum Antworten