Zitat von
quirks:
Bleibt der wirklich NUR im
RAM oder wird der bei vollem
RAM doch (zumindest teilweise) in die SWAP-Datei ausgelagert?
Da hast du mit TMemoryStream keinen Einfluss drauf. Hier kommt es drauf an, wie Windows konfiguriert ist.
Ein kleines Beispiel, mit einem 100 MB großen TMemoryStream. Da kannst du dann sofort sehen, wieviel ausgelagert wird.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
MEMINFOTEXT = 'Auslagerungsdatei ist ca. %d MB groß.';
var
MemStat: TMemoryStatus;
PageFileSize: Integer;
MemStream: TMemoryStream;
begin
// Größe der Auslagerungsdatei berechnen
MemStat.dwLength := SizeOf(TMemoryStatus);
GlobalMemoryStatus(MemStat);
PageFileSize := (MemStat.dwTotalPageFile - MemStat.dwAvailPageFile) div 1024 div 1024;
ShowMessage(Format(MEMINFOTEXT, [PageFileSize]));
// MemoryStream erstellen (100 MB)
MemStream := TMemoryStream.Create;
MemStream.Size := 104857600;
// Größe der Auslagerungsdatei neu berechnen
MemStat.dwLength := SizeOf(TMemoryStatus);
GlobalMemoryStatus(MemStat);
PageFileSize := (MemStat.dwTotalPageFile - MemStat.dwAvailPageFile) div 1024 div 1024;
ShowMessage(Format(MEMINFOTEXT, [PageFileSize]));
// MemoryStream wieder freigeben
MemStream.Free;
// Größe der Auslagerungsdatei neu berechnen
MemStat.dwLength := SizeOf(TMemoryStatus);
GlobalMemoryStatus(MemStat);
PageFileSize := (MemStat.dwTotalPageFile - MemStat.dwAvailPageFile) div 1024 div 1024;
ShowMessage(Format(MEMINFOTEXT, [PageFileSize]));
end;