Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#1

Belegung des internen FastMM abfragen?

  Alt 16. Mai 2010, 19:41
Ich versuche mal wieder über Delphi-Referenz durchsuchenGetMemoryManagerState an die Menge der Daten im Delphi-Speichermanager ranzukommen, aber egal was ich versuche, es stimmt vorne und hinten überhaupt nichts.

Aktuell bin ich hier, aber in meinem Projekt fehlen einige hundert MB.
(vorhin hatte ich sogar mal -500 MB )
Delphi-Quellcode:
Function GetMemoryLoad: Cardinal;
  Var MS: TMemoryManagerState;
    i: Integer;

  Begin
    GetMemoryManagerState(MS);
    Result := MS.TotalAllocatedLargeBlockSize
      + (MS.TotalAllocatedMediumBlockSize - MS.ReservedMediumBlockAddressSpace);
    For i := 0 to NumSmallBlockTypes - 1 do
      Result := Result - MS.SmallBlockTypeStates[i].ReservedAddressSpace
        + (MS.SmallBlockTypeStates[i].UseableBlockSize * MS.SmallBlockTypeStates[i].AllocatedBlockCount);
  End;
Das alte Delphi-Referenz durchsuchenGetHeapStatus liefert zwar "gute" Werte (TotalAllocated - Overhead),
aber es ist halt alt (deprecated).
TStringList befindet sich eine 100 MB Textdatei (Ansi), also 200 MB an Daten (Unicode eben) und dennoch werden grade Mal 50 MB angezeigt.

Wogegen der TaskManager sogar von 485 MB spricht, welches auch von GetHeapStatus in etwa bestätigt wird.


Wie berechnet man es also richtig?
(wobei es schon blöde ist, daß es in Zukunft keine nette "Übersicht" ala GetHeapStatus geben soll)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat