Speicherleck nach Umstellung auf VS2015 mit XP Support



  • Hallo,

    ich habe vor einiger Zeit eine Anwendung von VS2010 auf VS2015 umgestellt und im zweiten Schritt auch auf das VS2015 Toolset mit XP Support.
    Jetzt kommt es dazu das die Anwendung nur unter XP ein Speicherleck hat. Was mir auch noch aufgefallen ist, dass wenn ich das Fender der Dialoganwendung minimiere, der Speicher im Taskmanager verschwindet. Unter Windows 7 ist der Speicherverbrauch konstant.

    Kennt jemand das Verhalten? Was kann ich dagegen machen.

    Gruß
    Ernst


  • Mod

    Woran machst Du das Speicherleck fest?
    GDI oder normaler Speicher?



  • Ich schaue mir im Taskmanager den Wert Speicherauslastung an, dieser Wert steigt kontinuierlich an, geht aber zwischen durch aber auch wieder runter.
    Der Wert in der Spalte Virtueller Speicher steigt auch.

    Ich habe wirklich keine Idee, wo und wie ich suchen soll. Mein Entwicklungssystem ist ein Windows 7 Rechner und da läuft der Wert nicht hoch.

    ???



  • Der Task-Manager ist kein geeignetes Tool um festzustelle, ob Memory-Leaks vorhanden sind.

    Benutze z. B. den Visual Leak Detector: https://vld.codeplex.com/



  • Hallo,

    danke für den Tip mit dem Visual Leak Detector.

    Ich habe mir die aktuelle Version 2.0 geholt und laut Dokumentation eingebunden. (nur die vld.h Datei in eine meiner cpp-Dateien hinzugefügt.)

    Die Anwendung läßt sich auch kompilieren und starten. Nur es wird auch nach einer langen Laufzeit beim Beenden kein Log ausgegeben. Im Task-Manager ist der Speicher aber hochgelaufen.



  • Bekommst du von VLD eine Meldung beim Beenden des Programms, oder gar keine Meldung?

    Gibt nämlich Fälle wo VLD einfach nicht mehr dazu kommt die Leaks auszugeben. Bin mir nicht 100% sicher womit das zusammenhängt, aber ich weiss dass es z.B. Fälle gibt wo Windows in der "Beendigungsphase" eines Prozesses beschliesst diesen einfach abzuschiessen. Das passiert völlig "silent", bekommt man normalerweise also nichtmal mit. Höchstens dadurch dass bestimmter Code der eigentlich in der Beendigungsphase laufen sollte eben nicht läuft.

    Bzw. ist VLD leider auch nicht perfekt. Ist zwar ein mitunter sehr nützliches Tool, aber alle Leaks kann man damit auch nicht finden.

    Und dann wäre es noch möglich dass du ein Leak hast wo sich zwar der Speicherverbrauch während das Programm läuft immer weiter hochschraubt (ohne dass das so sein sollte/sein muss), beim Beenden dann aber trotzdem alles freigegeben wird. Solche Fehler vollautomatisch zu finden ist mMn. auch so-gut-wie unmöglich. Das Tool müsste ja beweisen dass Speicherbereiche die definitiv noch erreichbar sind (sonst könnten sie ja nicht freigegeben werden) nicht "sinnvoll" benutzt werden - bevor sie eben freigegeben werden.

    Und natürlich ist es möglich dass du überhaupt kein Leak hast und der Speicherverbrauch nur "komisch aussieht".



  • hustbaer schrieb:

    Bekommst du von VLD eine Meldung beim Beenden des Programms, oder gar keine Meldung?

    Nein, ich bekomme keine Meldung

    Ich habe jetzt den Speicherverbrauch auch mit dem Process Explorer analysiert, dieser zeigt wie zu erwrarten das gleiche Verhalten an. Ich habe nur dort ein Dump erzeugt und versuche dies auf meinem Entwicklungsrechner mit WinDbg zu analysieren.

    Damit habe ich aber bisher noch nichts gemacht. Hat dazu jemamd gute Tutorials oder Tipps?



  • Hallo,

    alle Maßnahmen und Tests haben leider kein Ergbenis gebracht.

    Habe die Software wieder auf das VS 2010 Toolset umgestellt und das Memory Leak ist wieder weg.


Anmelden zum Antworten