Alle Delphi-Versionen seit Delphi 2006 verfügen über einen aktualisierten Speichermanager, der schneller und funktionsreicher ist.
Eine der nettesten Funktionen des "neuen" Speichermanagers ermöglicht es Anwendungen, erwartete Speicherverluste zu registrieren (und die Registrierung aufzuheben) und optional unerwartete Speicherverluste beim Herunterfahren des Programms zu melden.
Wenn Sie WIN32-Anwendungen mit Delphi erstellen, müssen Sie unbedingt sicherstellen, dass Sie alle Objekte (Speicher), die Sie dynamisch erstellen, freigeben.
Ein Speicherverlust (oder ein Ressourcenverlust) tritt auf, wenn das Programm die Fähigkeit verliert, den verbrauchten Speicher freizugeben.
Das Erkennen und Melden von Speicherverlusten ist standardmäßig auf false eingestellt. Um dies zu aktivieren, müssen Sie die globale Variable ReportMemoryLeaksOnShutdown auf TRUE setzen.
Wenn die Anwendung geschlossen wird und unerwartete Speicherverluste auftreten, zeigt die Anwendung das Dialogfeld "Unerwarteter Speicherverlust" an.
Der beste Ort für den ReportMemoryLeaksOnShutdown ist die Quellcode-Datei (dpr) des Programms.
Start ReportMemoryLeaksOnShutdown: = DebugHook 0; // source "by" Delphi Application.Initialize; Application.MainFormOnTaskbar: = True; Application.CreateForm (TMainForm, MainForm); Application.Run; Ende.
Hinweis: Eine globale Variable DebugHook wird oben verwendet, um sicherzustellen, dass Speicherverluste angezeigt werden, wenn die Anwendung im Debug-Modus ausgeführt wird - wenn Sie F9 aus der Delphi-IDE anpassen.
Wenn ReportMemoryLeaksOnShutdown auf TRUE gesetzt ist, fügen Sie den folgenden Code in die OnCreate-Ereignisbehandlungsroutine des Hauptformulars ein.
var sl: TStringList; Start sl: = TStringList.Create; sl.Add ('Memory leak!'); Ende;
Führen Sie die Anwendung im Debug-Modus aus und beenden Sie sie. Das Dialogfeld "Speicherverlust" sollte angezeigt werden.
Hinweis: Wenn Sie nach einem Tool suchen, mit dem Sie Ihre Delphi-Anwendungsfehler abfangen können, z. B. Speicherbeschädigung, Speicherlecks, Speicherzuordnungsfehler, Variableninitialisierungsfehler, Variablendefinitionskonflikte, Zeigerfehler usw. Schauen Sie sich madExcept und EurekaLog an