页面错误剧增 PF使用居高(100分)

  • 主题发起人 主题发起人 wangpinggang
  • 开始时间 开始时间
W

wangpinggang

Unregistered / Unconfirmed
GUEST, unregistred user!
用D2007编一程序,主要完成定时读文件,写Sql库,用多线程方式5秒执行一次,有对象的
Create,但立即FreeAndNil
运行两天后,从任务管理器中发现
PF为1.2G 页面错误为8,323,281 内存6,260k 虚拟内存10,984k
我原本以为有对象没有free完(我敢保证,不可能),又创建了一个程序试验(只有一个默认Form1),运行后发现
页面错误为1,003 过一会发现为1,437

上网搜索delphi的free并没有真正释放????。
难道真是Delphi的内存管理???
望各位大哥帮忙!!!
 
运行了两天,内存6,260k 虚拟内存10,984k
这两个数据如果长时间不再增加的话,代表程序比较稳定了
页面错误这个不用管它,原因:

页面是操作系统管理内存的单位,通常是4KB,或者更高,整个物理内存被分为页面进行管理。现代计算机普遍支持称为"虚拟内存"的内存管理技术,用以给进程提供超过物理内存限制的存储空间。这种技术允许操作系统把不常用的内存页面上的数据换出到硬盘上,等需要时再读近来,或者说是把磁盘当内存用。假如某程序长期不用某个页面上的数据,操作系统就可能把它换出到磁盘上,而把物理内存分配给别的更需要它的进程。当那个进程再次需要读取该页面的数据时,因为该页面并不在物理内存中,而是在磁盘上,所以读取内存的操作就会出错,也就是页面错误。操作系统在捕获页面错误时,就从磁盘中把上次换出的数据重新读入内存,并重新执行出错的那条指令。因为这时数据已经在内存中,程序就得以继续正常运行。Windows进程的页面错误项就是用来记录页面错误的次数。如果物理内存越少,进程所需的内存越多,那么页面错误也就越多。值得注意的是系统创建进程的时候,甚至不需要把程序从硬盘上读入内存,而只是建立起内存地址和磁盘数据间的映射。这样CPU读取第一条指令的时候就会出一个页面错误。这样的好处就是系统能根据程序实际执行的情况来读取数据,用多少读多少。
 
谢谢
PF为持续增长会导致系统崩溃吗,今天是1.5G了
能不能把页面锁定在内存中,我的系统只运行这一个程序
 
PF增长得看是哪个程序使用的VM(虚拟内存)比较多
像SQL SERVER,在2G内存的服务器上跑,实际内存占用和VM占用都达到了1.5G,这是正常的
 
帮顶
没用过2007
 
找到了页面错误快速增加的原因,调用了一个查找进程的函数。
线程中
while true do begin
。。。。。。
FindProcess('sqlservr.exe');//没有此句页面错误几乎不增长
。。。。。。
Delay(1000);//延时1秒
end;



function FindProcess(AFileName: string): boolean;//查找进程 sqlservr.exe
var //引用TLHelp32单元
hSnapshot: THandle;//用于获得进程列表
lppe: TProcessEntry32;//用于查找进程
Found: Boolean;//用于判断进程遍历是否完成
begin
Result :=False;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//获得系统进程表
lppe.dwSize := SizeOf(TProcessEntry32);//需要初始化lppe记录的大小
Found := Process32First(hSnapshot, lppe);//将进程列表的第一个进程信息读入ppe中
while Found do
begin
if ((UpperCase(ExtractFileName(lppe.szExeFile))=UpperCase(AFileName)) or (UpperCase(lppe.szExeFile )=UpperCase(AFileName))) then
begin
Result :=True;
end;
Found := Process32Next(hSnapshot, lppe);//将进程列表的下一个进程读入lppe中
end;
end;


谢谢大哥帮忙指点了,
或其他查找进程的函数
 
自己顶, 怎么没人
 
帮助中,CreateToolhelp32Snapshot的Remarks写着:
To destroy the snapshot, use the CloseHandle function.
 
用了CloseHandle(hSnapshot)没有明显效果
 
接受答案了.
 
后退
顶部