zoukankan      html  css  js  c++  java
  • [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.


     

  • 相关阅读:
    C#中如何求时间间隔?
    Ilist<T> 转换成 DataSet
    EditPlus 快捷键
    Array和ArrayList的异同点
    sql server 查询数据库中有多少个表
    jquery + Css 模式对话框
    paddingtop、margintop和top的区别
    JQuery之ContextMenu(右键菜单)
    关于TextBox的Enable与ReadOnly属性
    AjaxToollit 3.5 使用整理
  • 原文地址:https://www.cnblogs.com/dabiao/p/1617746.html
Copyright © 2011-2022 走看看