Speicherlecks / Speicheroptimiereung - Wie geht man vor ?



  • @ Akari: wie erstellt man sinnvoll solche Logdateien????

    Wäre für ein einfaches Beispiel mit erklärung vielleicht dankbar!



  • Speicherleg? schrieb:

    @ Akari: wie erstellt man sinnvoll solche Logdateien????

    Wäre für ein einfaches Beispiel mit erklärung vielleicht dankbar!

    Dazu nimmst du am einfachsten TFileStream.
    Damit öffnest du beim Start deines Programms mit TFileStream eine Datei zum Schreiben. Bei jedem dir wichtigen Ereigniss schreibst du die Nachricht im Schema

    aktuelle Systemzeit <Tab> Nachricht <Zeilenende>
    

    Am ende des Pogramms löscht du das Stream-Objekt.

    Wenn du dann ein VCL-Control erstellst, schreibst du eine Nachricht :

    Konstruktor für <Control-Name>,<Control-Owner>
    

    beim Löschen eines Controls

    Destruktor für <Control-Name>,<Control-Owner>
    

    dann weißt du genau, welche Controls du nicht löscht.
    Es gibt dann noch die Möglichkeit, new und delete zu überladen, um dort direkt den Ablauf zu loggen. Dazu gibt es irgendwo einen Thread im C++ Forum

    bis bald
    akari



  • maYer schrieb:

    DynamicArray<AnsiString> myvar;

    dafür gibt es TStringList!

    maYer schrieb:

    Wenn ich eine VCL klasse darin habe geh ich den array stück für stück durch und führe die destructoren aus.

    dafür würde ich TList verwenden und nur die zeiger auf die objekte speichern.



  • Es gibt desweiteren noch TObjectList und TComponentList. Die hab ich zwar noch nie verwendet, in der Hilfe steht aber, dass diese Listen sich auch um den Speicher ihrer Objekte kümmern.



  • ich verwende memproof.

    das zeigt dir schön wieviel speicher reserviert wurde und wieviel davon wieder freigegeben wird. in der vcl sind auch einige lecks drin. wenn du das ganze im debugmodus testet, dann bekommst du die objekte angezeigt, bei denen es klemmt.



  • Sunday schrieb:

    ich verwende memproof.

    Funktioniert das auch mit BCB6?

    Gruß,

    Alexander



  • ausprobieren! bei mir schon.



  • Alles klar,

    also grundsätzlich keine DynamicArray verwenden?
    Ich meine es ist bei mir oft nicht zu ersetzen, weil die Array Teilweise 3 Dimensionen haben.

    Die Fehler in meinem Fall hab ich schon fast alle gefunden. Zum größten teil VCL-Kompos aus Properties von selbstgeschriebenen Klassen, die im DEstruktor nicht gelöscht wurden und solche Dinge. Da sollte man aufpassen.

    Werd mir alles einemal anschauen, vielen Dank.



  • DynamicArray ist lahm. Wozu braucht man ein dynamisches dreidimensionales Array?

    Fuer solche Sachen schreib ich mir immer ne eigene Klasse.



  • Klar, kann ich dafür eine Struktur schreiben, aber bei simplen sachen lohnt das nicht immer.
    Wenn es jedoch speicherlecks gibt, werde ich es möglichst unterlassen.

    Danke euch


Anmelden zum Antworten