[Delphi]TMemoryStatus--获取内存信息

下面介绍一种方法可以决定系统内存的多少、使用状态等信息。更重要的是,应用程序可以利用这项技术来决定客户机的可用内存的大小,利用这些信息,应用程序可以动态地优化程序的性能。例如,如果有足够的内存可以利用双缓存优化位图的操作。
利用Windows API函数GlobalMemoryStatus可以完成上述功能。

GlobalMemoryStatus接收一个类型为TMemoryStatus的变参,通过这个参数就可以获得Windows当前的内存状态。TMemoryStatus的结构如下:

 

原型
 1 typedef struct _MEMORYSTATUS { 
 2 
 3 DWORD dwLength; { sizeof(MEMORYSTATUS),该记录结构的大小}
 4 DWORD dwMemoryLoad;    {使用内存所占百分比}
 5 DWORD dwTotalPhys;     { 全部物理内存字节数}
 6 DWORD dwAvailPhys;     { 可用物理内存字节数}
 7 DWORD dwTotalPageFile; { 全部页文件字节数  }
 8 DWORD dwAvailPageFile; { 可用页文件字节数   }
 9 DWORD dwTotalVirtual;  { 全部虚拟内存字节数}
10 DWORD dwAvailVirtual;  { 可用虚拟内存字节数}
11 } MEMORYSTATUS, *LPMEMORYSTATUS;

 


 

使用举例
 1 { 在windows7 + Delphi2010下编译通过 }
 2 {但是显示的dwTotalPageFile和dwAvailPageFile都是负值,为什么么?}
 3 unit Unit2;
 4 
 5 interface
 6 
 7 uses
 8   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 9   Dialogs, StdCtrls;
10 
11 type
12   TForm2 = class(TForm)
13     mmo1: TMemo;
14     btn1: TButton;
15     procedure btn1Click(Sender: TObject);
16   private
17     { Private declarations }
18   public
19     { Public declarations }
20   end;
21 
22 var
23   Form2: TForm2;
24 
25 implementation
26 
27 {$R *.dfm}
28 
29 procedure TForm2.btn1Click(Sender: TObject);
30 var
31   memoinfo : TMemoryStatus;
32 begin
33 
34   GlobalMemoryStatus(memoinfo);
35   with mmo1.Lines do
36     begin
37       Add(Format('Length:' + #9#9 + '%d' + '  Bytes',[memoinfo.dwLength]));
38       Add(Format('MemoryLoad:' + #9 + '%d' ,[memoinfo.dwMemoryLoad]));
39       Add(Format('TotalPhys:' + #9 + '%d' + '  Bytes',[memoinfo.dwTotalPhys]));
40       Add(Format('AvailPhys:' + #9 + '%d' + '  Bytes',[memoinfo.dwAvailPhys]));
41       Add(Format('TotalPageFile:' + #9 + '%d' + '  Bytes',[memoinfo.dwTotalPageFile]));
42       Add(Format('AvailPageFile:' + #9 + '%d' + '  Bytes',[memoinfo.dwAvailPageFile]));
43       Add(Format('TotalVirtual:' + #9 + '%d' + '  Bytes',[memoinfo.dwTotalVirtual]));
44       Add(Format('AvailVirtual:' + #9 + '%d' + '  Bytes',[memoinfo.dwAvailVirtual]));
45     end;
46 end;
47 end.

 


 

posted @ 2009-12-05 21:44  Delcpp  阅读(3259)  评论(0编辑  收藏  举报