[Delphi]TMemoryStatus–擷取記憶體資訊

來源:互聯網
上載者:User

下面介紹一種方法可以決定系統記憶體的多少、使用狀態等資訊。更重要的是,應用程式可以利用這項技術來決定客戶機的可用記憶體的大小,利用這些資訊,應用程式可以動態地最佳化程式的效能。例如,如果有足夠的記憶體可以利用雙緩衝最佳化位元影像的操作。
利用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.

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.