我使用 Delphi XE8测试了SetLength()
和GetMem()
程序。
用于测试SetLength()
的代码:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
a: array of Byte;
begin
SetLength(a,100*1024*1024); //100Mb
ShowMessage('See Task Manager');
SetLength(a,0);
end;
“Task Manager(任务管理器)”显示Project1.exe
的内存使用量约为100 Mb。
用于测试GetMem()
的代码:
procedure TForm1.SpeedButton2Click(Sender: TObject);
var
p: PByte;
begin
GetMem(p,100*1024*1024); //100Mb
ShowMessage('See Task Manager');
FreeMem(p);
end;
“Task Manager(任务管理器)”显示Project1.exe
的内存使用量约为2Mb。
使用SetLength()
时,任务管理器会显示正确的内存使用情况。我的问题:SetLength()
比GetMem()
好吗?
这是我的考验:
https://www.mediafire.com/file/r0dfb99mlc8h1jj/DelphiTest.rar/file
1条答案
按热度按时间30byixjq1#
看起来Windows任务管理器正在告诉您一个不同内存的值(可能是Used,而不是Allocated)。我得到的结果与您使用任务管理器时得到的结果相同。
但是,我通常不使用它,我使用SystemInternal的Process Explorer。
在快照中,应用程序被称为GetMem,Process Explorer显示正确的数字。第一列是虚拟大小,第二列是专用字节。它们都增加了100M。
之前
之后
而SetLength显示了类似的数字。也就是说,就 Delphi 而言,内存使用是相同的,这是应该的。