![]() |
AW: Maßnahmen zum Speicherverbrauch minimieren
Die Frage nach dem Speicher wurde gerne verdrängt. Warum es wichtig ist, was der Taskmanager anzeigt erschließt sich mir nicht. (Außer das manche Leute meinen man könne da auf Memory-Leaks schließen)
Die Frage vieviel Speicherplatz habe ich noch finde ich schon sehr wichtig. Ich glaube da aber nicht dass es keine Antwort darauf gibt, auch wenn ich sie leider auch nicht weiß. Um den verbrauchten Speicher festzustellen benutzen wir
Delphi-Quellcode:
Wieviel Speicher noch frei ist, sollte man doch von Windows erfahren können. Bin jetzt zu faul zum googeln. :-D
class function TMemoryManager.GetApplicationMemory(): Int64;
var memoryState: TMemoryManagerState; blockState : TSmallBlockTypeState; begin GetMemoryManagerState(memoryState); with memoryState do begin Result := TotalAllocatedMediumBlockSize + TotalAllocatedLargeBlockSize; for blockState in SmallBlockTypeStates do Inc(Result, blockState.AllocatedBlockCount * blockState.UseableBlockSize); end; end; |
AW: Maßnahmen zum Speicherverbrauch minimieren
Hier ging es aber darum, dass eine Handvoll Objekte den Speicher mit Meta-Informationen zugemüllt haben.
Vermutlich haben diese Meta-Informationen mehr Speicher verbraucht als die Nutzdaten. Das ist in meinen Augen keine Optimierung. Wenn ich tonnenweise Speicherlecks produzieren würde, dann ist das Beseitigen auch keine Optimierung, sondern ich mache es erst dann richtig. Optimierungen fangen da an, wo man mit richtig fertig ist. Make it work, then make it fast (and/or smart). |
AW: Maßnahmen zum Speicherverbrauch minimieren
@freimatz
Memory-Leaks habe ich nicht (siehe #15). Der Taskmanager bietet einen Hinweis, wie viel Speicher die Anwendung aktuell insgesamt verbraucht. Das wäre schon mal ein Anhaltspunkt. Ich werde demnächst mal Deine Funktion testen. Zitat:
@Sir Rufo Die Strings sind Nutzdaten. Als Müll würde ich die eigentlich nicht bezeichnen wollen. ;-) |
AW: Maßnahmen zum Speicherverbrauch minimieren
Die Frage nach dem freien Speicher ist kompliziert, da sich die Rahmenbedingungen ständig ändern können. Das fängt schon in dem Moment an, in dem jemand im Prozess, aber außerhalb der Kontrolle deines Frameworks anfängt, Speicher zu allozieren (zum Beispiel in einer DLL).
Man kann dem Framework ein konfigurierbares Limit geben, das man selbst überwacht; wenn diese Grenze bei einer Allokation überschritten würde, muss es vorher Objekte freigeben. Das sollte man wohl auch machen, wenn eine Allokation fehlschlägt(OutOfMemory). Dabei sollte man es vermeiden, beim Freigeben Objekte anlegen zu müssen :stupid: Außerdem kann man in diesem Moment das Limit heruntersetzen. |
AW: Maßnahmen zum Speicherverbrauch minimieren
Zitat:
Und als Müll habe ich die nicht bezeichnet, sondern nur, dass diese Meta-Informationen den Speicher vollgemüllt haben. Um die Schuhgröße zu speichern hast du 4 Byte Nutzdaten (Double) und 20+ Byte Meta-Informationen (UnicodeString) verbraten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz