Speicherfrage zu GetOpenFileName



  • Hi,
    Schreibe gerade ein Programm und habe mir das mal genauer im Taskmanager angeschaut. Da schau ich mir halt noch den aktuellen Speicherverbrauch und die Threadanzahl an. Wenn ich das Programm Starte verbrauche ich ca. 2MB und habe 2 Threads (woher die auch immer kommen? Nicht von mir! Aber auch ladde.)
    Wenn ich nun in mein Menü gehe und auf Datei laden klicke wo ich die Funktion

    GetOpenFileName(...);
    

    Aufrufe steigt der Speicherverbrauch auf über 5Mb und die Threadanzahl auch auf 5. Wenn ich nun einfach meine Datei lade oder sogar abbrechen drücke dann bleiben die 5MB und die 5 threads. Die Threads gehen nach und nach runter wieder auf 2 aber es bleiben 5MB. Aber ich mache sonst nix mit dem Speicher es muss also an GetOpenFileName liegen. Aber wieso gibt er den Speicher nicht wieder frei?

    Habt ihr da ne Idee. Ist rein aus Interesse halber.

    [edit]
    Hab es gerade in anderen Programmen getestet da ist es genauso also muss es wohl an GetOpenFileName liegen.
    [/edit]
    MfG schirrmie



  • Zeig doch mal die Funktion, welche die OPENFILENAME struct füllt und GetOpenFileName() aufruft.

    Greetz, Swordfish


  • Mod

    Durch diese Funktion wird evtl. COM initialisiert, was Du bisher evtl. noch nicht benutzt hast, dadurch werden vermultich die weiteren Threads erzeugt. Im Debugger kannst Du wahrscheinlich auch beobachten, dass weitere DLLs geladen werden.
    Somit is das ganze nicht verwunderlich.



  • Naja mich stört halt nur das er den Speicher nicht wieder freigibt.



  • Dann schreib dir deinen eigenen Dialog. -.-


  • Mod

    schirrmie schrieb:

    Naja mich stört halt nur das er den Speicher nicht wieder freigibt.

    Das geht so gesehen gar nicht effektiv, denn die COMDLG32 ist dann nun mal geladen und verwendet. Das Freigeben des Speichers würde mehr Aufwand kosten als wenn COM initialisiert bleibt.
    Weiterhin wird einiges auf Kosten von Delayed Loaded DLLs gehen, die natürlich auch nicht mehr freigegegeben werden können!


Anmelden zum Antworten