P
PowerDelphi
Unregistered / Unconfirmed
GUEST, unregistred user!
我有一段程序不知错在什么地方,我在implementation部分声明了如下类型:
type
TProcessInfo=Record
ExeFile:string;
ProcessIDWORD;
end;
PProcessInfo=^TProcessInfo;
然后有以下过程:
procedure TForm1.Timer1Timer(Sender: TObject);//Timer1.interval:=1000
var
pProcessInfo;
i:integer;
ContinueLoop:Boolean;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
hh:HWND;
begin
FSnapshotHandle:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize :=SizeOf(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
new(p);
p.ExeFile :=FProcessEntry32.szExeFile
i:=checklistbox1.Items.IndexOf(lowercase(extractfilename(p.ExeFile)));
if i>=0 then
begin
p.ProcessID :=FProcessEntry32.th32ProcessID
hh:=OpenProcess(PROCESS_ALL_ACCESS,true,p.ProcessID);
TerminateProcess(hh,0);
application.MessageBox ('此程序被禁止在本机运行,请与管理员联系!','禁止运行 ',MB_ICONINFORMATION+MB_OK);
end;
Dispose(p);
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
这个程序运行达到了我的目的:根据程序来关闭要想关闭的程序,但是一个非常严重的问题产生了:内存的使用太惊人了。开始我运行这个程序前可用物理内存是
116MB(RamIdle测得),这是退出RamIdle改用WindowsMe自带的“系统监视器”继续监测可用物理内存,大约5分钟过后,可用物理内存变为91.2MB,这时退出这个程序,可用物理内存又突增至116MB(系统监视器测得),过一会儿后又增至116.2MB后来一直稳定在116MB这个水平没有变化。我明明是new(p)后又Dispose(p)不知我错在什么地方,怎样才能避免这种情况,请大侠们指点迷津。不盛感激!!!
type
TProcessInfo=Record
ExeFile:string;
ProcessIDWORD;
end;
PProcessInfo=^TProcessInfo;
然后有以下过程:
procedure TForm1.Timer1Timer(Sender: TObject);//Timer1.interval:=1000
var
pProcessInfo;
i:integer;
ContinueLoop:Boolean;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
hh:HWND;
begin
FSnapshotHandle:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize :=SizeOf(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
new(p);
p.ExeFile :=FProcessEntry32.szExeFile
i:=checklistbox1.Items.IndexOf(lowercase(extractfilename(p.ExeFile)));
if i>=0 then
begin
p.ProcessID :=FProcessEntry32.th32ProcessID
hh:=OpenProcess(PROCESS_ALL_ACCESS,true,p.ProcessID);
TerminateProcess(hh,0);
application.MessageBox ('此程序被禁止在本机运行,请与管理员联系!','禁止运行 ',MB_ICONINFORMATION+MB_OK);
end;
Dispose(p);
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;
这个程序运行达到了我的目的:根据程序来关闭要想关闭的程序,但是一个非常严重的问题产生了:内存的使用太惊人了。开始我运行这个程序前可用物理内存是
116MB(RamIdle测得),这是退出RamIdle改用WindowsMe自带的“系统监视器”继续监测可用物理内存,大约5分钟过后,可用物理内存变为91.2MB,这时退出这个程序,可用物理内存又突增至116MB(系统监视器测得),过一会儿后又增至116.2MB后来一直稳定在116MB这个水平没有变化。我明明是new(p)后又Dispose(p)不知我错在什么地方,怎样才能避免这种情况,请大侠们指点迷津。不盛感激!!!