windows – 使用delphi确定进程虚拟大小
发布时间:2020-12-14 04:20:49 所属栏目:Windows 来源:网络整理
导读:我有一个Delphi程序,我正在研究这个程序如何在日志文件中打印自己的“虚拟大
我有一个Delphi程序,我正在研究这个程序如何在日志文件中打印自己的“虚拟大小”,以便我可以看到它何时使用了太多内存.如何使用Delphi代码确定“虚拟大小”?
“虚拟大小”是指Process Explorer显示的值.普通任务管理器无法显示该值.它不是程序的内存使用,而是地址空间的使用.在Win32上,程序不能使用超过2 GB的地址空间. PS:我使用的是Delphi 6,但其他版本的代码/信息也应该没问题.
由于这个
post给出了如何使用C/C++获取虚拟大小的提示,我能够编写以下Delphi函数:
Type TMemoryStatusEx = packed record dwLength: DWORD; dwMemoryLoad: DWORD; ullTotalPhys: Int64; ullAvailPhys: Int64; ullTotalPageFile: Int64; ullAvailPageFile: Int64; ullTotalVirtual: Int64; ullAvailVirtual: Int64; ullAvailExtendedVirtual: Int64; end; TGlobalMemoryStatusEx = function(var MSE: TMemoryStatusEx): LongBool; stdcall; function VirtualSizeUsage: Int64; var MSE: TMemoryStatusEx; fnGlobalMemoryStatusEx: TGlobalMemoryStatusEx; begin Result := 0; @fnGlobalMemoryStatusEx := GetProcAddress(GetModuleHandle(kernel32),'GlobalMemoryStatusEx'); if Assigned(@fnGlobalMemoryStatusEx) then begin MSE.dwLength := SizeOf(MSE); if fnGlobalMemoryStatusEx(MSE) then Result := MSE.ullTotalVirtual-MSE.ullAvailVirtual; end; end; 它似乎对我很有用(Delphi 6,Win XP).使用GlobalMemoryStatus而不是GlobalMemoryStatusEx可能有一个更简单的解决方案,但它在内存超过2 GB的系统上无法正常工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2008 – 混合网络2003/2008文件共享问题
- windows-server-2008 – 新服务器(IIS7 / Windows Server 2
- 什么是定期系统维护? (视窗)
- 如何让Windows Server DNS使用hosts文件来解析特定的主机名
- 在Windows 7上使用Powershell创建网络共享文件夹
- Windows – Active Directory – 只有桥头可以获得完整的林
- windows – 使用VB脚本监视目录
- windows – 将Github遥控器添加到GitKraken
- Windows单机安装hadoop
- windows-server-2003 – 证明内存升级