function getnow():Double;
var
lic, lif: Int64;
begin
QueryPerformanceCounter(lic);
QueryPerformanceFrequency(lif);
Result := lic / lif;
end;
//---------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
p: TJPEGImage;
ms: TMemoryStream;
t0, t1, t2: Double;
begin
p := TJPEGImage.Create();
p.LoadFromFile('D:\Avatar_8V1A9872_Edited.jpg');
p.CompressionQuality := 5;
Self.Canvas.Draw(0, 0, p);
p.Compress();
ms := TMemoryStream.Create();
//*************************************
//تو این قسمت میتونید حافظه رو رزرو کنید بیشتر از مقداری که لازم دارید برای اطمینان من 10 مگابایت گذاشتم.
//ms->SetSize(10 * 1024 * 1024);
//ms->Position = 0;
//*************************************
t0 := getnow();
p.SaveToStream(ms);
t1 := getnow();
ms.Position := 0;
p.SaveToStream(ms);
t2 := getnow();
ShowMessage(FloatToStr(t1 - t0) + ' sanie hamrah ba gereftane hafeze jadid'#13#10 +
FloatToStr(t2 - t1) + ' sanie bedone gereftane hafeze jadid'#13#10 +
FloatToStr((t1 - t0) / (t2 - t1)) + ' nesbate zamanha :)');
ms.Position := 0;
p.LoadFromStream(ms);
Self.Canvas.Draw(0, 500, p);
end;
این یک نمونه هست که دوبار سیو میکنه. بار اول حافظه ی جدید میگیره و بار دوم از همون حافظه استفاده میکنه برای ذخیره و در آخر زمان هر دو رو مقایسه میکنه. من یک تصویر 4 مگی رو امتحان کردم نتیجه از نظر زمانی 4 برابر شد!