::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-05 10:46:08, Hit : 5351, Vote : 1274
 메모리 부하(load)량 측정해 보기

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    StartTime: TDateTime;
    UsedTime: TDateTime;
    TotalPhys: Integer;
    StartMemoryLoad: Integer;
    EndMemoryLoad: Integer;
    StartAvailPhys: Integer;
    EndAvailPhys: Integer;
    StartAvailPageFile: Integer;
    EndAvailPageFile: Integer;
    StartAvailVirtual: Integer;
    EndAvailVirtual: Integer;
  public
    { Public declarations }
    procedure StartTimeMem;
    procedure StopTimeMem;
    function DisplayInfo: String;
   end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

// 부하(load)량 검사 시작
procedure TForm1.StartTimeMem;
var
  SysMemoryStatus: TMemoryStatus;
begin
  // GlobalMemoryStatus() 는 물리적인(physical) 메모리, 가상(virtual) 메모리의
  // 현재 상태를 알아 내는데 사용한다
  GlobalMemoryStatus(SysMemoryStatus);

  // percent of memory in use
  StartMemoryLoad      := SysMemoryStatus.dwMemoryLoad;
  // free physical memory bytes
  StartAvailPhys       := SysMemoryStatus.dwAvailPhys;
  // free bytes of paging file
  StartAvailPageFile   := SysMemoryStatus.dwAvailPageFile;
  // free user bytes
  StartAvailVirtual    := SysMemoryStatus.dwAvailVirtual;

  StartTime := NOW;
end;

// 부하(load)량 검사 종료
procedure TForm1.StopTimeMem;
var
  SysMemoryStatus: TMemoryStatus;
begin
  UsedTime := NOW - StartTime; // 총 검사시간

  GlobalMemoryStatus(SysMemoryStatus);

  TotalPhys          := SysMemoryStatus.dwTotalPhys;
  EndMemoryLoad      := SysMemoryStatus.dwMemoryLoad;
  EndAvailPhys       := SysMemoryStatus.dwAvailPhys;
  EndAvailPageFile   := SysMemoryStatus.dwAvailPageFile;
  EndAvailVirtual    := SysMemoryStatus.dwAvailVirtual;
end;

// 부하(load)량 검사 정보
function TForm1.DisplayInfo: String;
var
  Hour, Min, Sec, MSec: Word;
  TimeMemMessage: String;
var
  UsedMemoryLoad, UsedAvailPhys, UsedAvailPageFile, UsedAvailVirtual,
  StrStartMemoryLoad, StrStartAvailPhys, StrStartAvailPageFile,
  StrStartAvailVirtual,
  StrEndMemoryLoad, StrTotalPhys, StrEndAvailPhys, StrEndAvailPageFile,
  StrEndAvailVirtual: String;
begin
  // TDateTime형의 총 검사시간을 각각 분리한다
  DecodeTime(UsedTime, Hour, Min, Sec, MSec);

  UsedMemoryLoad := IntToStr(EndMemoryLoad - StartMemoryLoad);

  UsedAvailPhys :=
     FloatToStrF( (StartAvailPhys - EndAvailPhys), ffNumber, 10, 0) ;
  UsedAvailPageFile :=
     FloatToStrF( (StartAvailPageFile - EndAvailPageFile), ffNumber, 10, 0) ;
  UsedAvailVirtual :=
     FloatToStrF( (StartAvailVirtual - EndAvailVirtual), ffNumber, 10, 0) ;

  StrTotalPhys := FloatToStrF(TotalPhys, ffNumber, 13, 0);

  StrStartMemoryLoad := FloatToStrF(StartMemoryLoad, ffNumber, 13, 0);
  StrStartAvailPhys := FloatToStrF(StartAvailPhys, ffNumber, 13, 0);
  StrStartAvailPageFile := FloatToStrF(StartAvailPageFile, ffNumber, 13, 0);
  StrStartAvailVirtual := FloatToStrF(StartAvailVirtual, ffNumber, 13, 0);

  StrEndMemoryLoad := FloatToStrF(EndMemoryLoad, ffNumber, 13, 0);
  StrEndAvailPhys := FloatToStrF(EndAvailPhys, ffNumber, 13, 0);
  StrEndAvailPageFile := FloatToStrF(EndAvailPageFile, ffNumber, 13, 0);
  StrEndAvailVirtual := FloatToStrF(EndAvailVirtual, ffNumber, 13, 0);

  TimeMemMessage :=  'Elapsed time:  ' + IntToStr(Min) + ' Minutes  '
                                   + IntToStr(Sec) + ' Seconds  '
                                   + IntToStr(MSec)+ ' Milliseconds'
                                   +#10+#13+#10+#13+
     'Total physical memory: ' + StrTotalPhys + #10+#13+#10+#13 +
     'Percent of memory in use:' + #10+#13 +
        #9 + StrStartMemoryLoad + '%  before' + #10+#13 +
        #9 + StrEndMemoryLoad + '% after' + #10+#13 +
        #9 + UsedMemoryLoad + '% used' + #10+#13+#10+#13 +
     'Free physical memory:' + #10+#13 +
        #9 + StrStartAvailPhys + ' before' + #10+#13 +
        #9 + StrEndAvailPhys + ' after' + #10+#13 +
        #9 + UsedAvailPhys + ' used' + #10+#13+#10+#13 +
     'Paging file free:' + #10+#13 +
        #9 + StrStartAvailPageFile + ' before' + #10+#13 +
        #9 + StrEndAvailPageFile + ' after' + #10+#13 +
        #9 + UsedAvailPageFile + ' used' + #10+#13+#10+#13 +
     'Available virtual address space:' + #10+#13 +
        #9 + StrStartAvailVirtual + ' before' + #10+#13 +
        #9 + StrEndAvailVirtual + ' after' + #10+#13 +
        #9 + UsedAvailVirtual + ' used';

  DisplayInfo := TimeMemMessage;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  RunCommand: array[0..MAX_PATH] of Char;
begin
  StartTimeMem; // 부하(load)량 검사 시작

  // 부하량을 측정하기 위해 윈도우즈 탐색기를 하나 실행한다
  GetWindowsDirectory(RunCommand, MAX_PATH);
  StrCat(RunCommand, PChar('EXPLORER.EXE /n,/e'));
  WinExec(RunCommand, SW_SHOWNORMAL);

  StopTimeMem; // 부하(load)량 검사 종료
  ShowMessage(DisplayInfo); // 부하(load)량 검사 정보
end;

end.





611   [일반/컴포넌트] 모서리가 둥근(rounded ends) TMemo 만들기  김영대 2004/07/25 4643 1191
610   [윈도우즈 API] 모서리가 둥근(rounded ends) TEdit 만들기  김영대 2003/03/07 4958 1288
609   [윈도우즈 API] 모든 창을 아이콘 표시/취소  김영대 2003/03/07 4329 1236
608   [일반/컴포넌트] 모든 드라이브,디렉토리 검색하여 파일 찾기  김영대 2003/03/07 4810 1189
607   [네트웍/인터넷] 모든 TCP/IP interfaces 의 IP/Netmask 구하기  김영대 2003/03/07 5726 1258
606   [데이터베이스] 몇가지 BDE 환경정보 구하기  김영대 2003/03/07 4457 1175
605   [일반/컴포넌트] 명령행 인자(command line argument) 사용하기  김영대 2003/03/05 4986 1334
604   [일반/컴포넌트] 명령행 인자 받아오기  김영대 2003/03/05 7297 1885
603   [일반/컴포넌트] 메인메뉴가 팝업될때 이벤트를 탈수있는방법  김영대 2003/03/07 6607 1725
  [시스템] 메모리 부하(load)량 측정해 보기  김영대 2003/03/05 5351 1274
601   [윈도우즈 API] 메모(TMemo)의 커서(캐럿)모양 바꾸기  김영대 2003/03/05 5032 1925
600   [일반/컴포넌트] 메뉴의 잘못된 accelerator 를 선택했을때  김영대 2003/03/05 6436 1829
599   [일반/컴포넌트] 메뉴 아이템의 동적 추가와 그림넣기  김영대 2003/03/04 7982 1270
598   [시스템] 마이크 볼륨 조절하기  김영대 2003/03/06 4679 1289
597   [일반/컴포넌트] 마우스커서를 특정위치로 이동시키기  김영대 2003/03/05 5948 1216
596   [시스템] 마우스의 좌/우 기능설정과 버튼갯수 알기  김영대 2003/03/06 7502 2033
595   [시스템] 마우스의 좌,우 버튼의 동작 바꾸기  김영대 2003/03/07 4310 1207
594   [윈도우즈 API] 마우스의 이동범위 제한하기  김영대 2003/03/05 6050 1496
593   [윈도우즈 API] 마우스의 모양 바꾸고 이동범위 제한하기  김영대 2003/03/05 5146 1268
592   [일반/컴포넌트] 마우스영역 제어하기  김영대 2003/03/05 3710 985
591   [일반/컴포넌트] 마우스를 특정 콤포넌트 위로 위치시키기  김영대 2003/03/05 4360 1113
590   [일반/컴포넌트] 마우스로 ProgressBar의 Position 바꾸기  김영대 2006/02/28 5344 1372
589   [일반/컴포넌트] 마우스가 폼위에 있는지 여부를 알아내려면...  김영대 2003/03/05 5312 1447
588   [시스템] 마우스가 설치되어 있는지 검사하기  김영대 2003/03/07 6908 1849
587   [시스템] 마우스 포인터 속도 바꾸기  김영대 2003/03/06 5075 1260
586   [시스템] 마우스 포인터 속도 구하기  김영대 2003/03/06 5598 1722
585   [일반/컴포넌트] 마우스 커서 보이기/감추기  김영대 2003/03/05 6344 1700
584   [시스템] 마우스 자취(trails)의 갯수 조정하기  김영대 2003/03/06 5977 1845
583   [윈도우즈 API] 마우스 위치의 콘트롤(콤포넌트)을 조사하기  김영대 2003/03/07 4662 1122
582   [윈도우즈 API] 마우스 위치(Desktop)의 색상값 구하기  김영대 2003/03/05 6332 1590
581   [시스템] 마우스 아래의 윈도우 핸들 구하기  김영대 2004/07/24 9669 4048
580   [시스템] 마우스 두 번 누르기 속도 조정하기  김영대 2003/03/06 6048 1832
579   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 6958 1412
578   [일반/컴포넌트] 루틴의 처리시간(경과시간) 구하기  김영대 2003/03/05 4301 1110
577   [시스템] 로컬 가상 드라이버(substitution device) 만들고 제거하기  김영대 2004/07/25 6254 1337
576   [일반/컴포넌트] 레코드 구조를 배열요소로 갖는 정적인 배열  김영대 2003/03/05 4090 1099
575   [윈도우즈 API] 레지스트리의 특정키를 파일로 저장/복원하기  김영대 2003/03/07 6621 1495
574   [윈도우즈 API] 레지스트리의 변경여부 알리는 2가지 방법  김영대 2003/03/06 4786 1286
573   [일반/컴포넌트] 레지스트리의 기본 RootKey 바꾸기  김영대 2003/03/05 4223 1278
572   [일반/컴포넌트] 레지스트리의 "(기본값)" 에 읽고/쓰기  김영대 2003/03/07 4005 1138

[1][2][3][4][5][6][7][8][9] 10 ..[25] [다음 10개]
 

Copyright 1999-2023 Zeroboard / skin by zero