Ich versuche mal wieder über
GetMemoryManagerState 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
GetHeapStatus 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)