Q&A

  • 특정 프로세스의 메모리사용량을 알고 싶습니다.
안녕하세요.
특정 프로세스가 메모리를 많이 잡아먹어서, 일정 크기 이상이 되면 죽였다가 다시 살려놓고 싶습니다.
프로세스를 찾고 죽이는 기능은 여기저기서 많이들 설명해 주셨는데, 그 프로세스의 크기 같은 정보를
볼 수 있는 기능을 설명한게 없어서요...
작업관리자에 있는 열선택 창에 표시된 정보들 중 메모리사용 크기가 필요한 겁니다.

감사합니다.
2  COMMENTS
  • Profile
    구창민 2007.07.26 03:23
    안녕하세요..

    아래 내용을 참고하시고 즐거운 프로그래밍 하시길~

    ... get info on memory usage from a given process?
    Author: David  
    [ Print tip ]    

    Tip Rating (16):  
          



    //...

    uses
      psAPI;


    //...

    function GetProcessMemorySize(_sProcessName: string; var _nMemSize: Cardinal): Boolean;
    var
      l_nWndHandle, l_nProcID, l_nTmpHandle: HWND;
      l_pPMC: PPROCESS_MEMORY_COUNTERS;
      l_pPMCSize: Cardinal;
    begin
      l_nWndHandle := FindWindow(nil, PChar(_sProcessName));

      if l_nWndHandle = 0 then
      begin
        Result := False;
        Exit;
      end;

      l_pPMCSize := SizeOf(PROCESS_MEMORY_COUNTERS);

      GetMem(l_pPMC, l_pPMCSize);
      l_pPMC^.cb := l_pPMCSize;

      GetWindowThreadProcessId(l_nWndHandle, @l_nProcID);
      l_nTmpHandle := OpenProcess(PROCESS_ALL_ACCESS, False, l_nProcID);

      if (GetProcessMemoryInfo(l_nTmpHandle, l_pPMC, l_pPMCSize)) then
        _nMemSize := l_pPMC^.WorkingSetSize
      else
        _nMemSize := 0;

      FreeMem(l_pPMC);

      Result := True;
    end;

    //Beispiel

    procedure TForm1.Button1Click(Sender: TObject);
    var
      l_nSize: Cardinal;
    begin
      if (GetProcessMemorySize('Unbenannt - Editor', l_nSize)) then
        ShowMessage('Size: ' + IntToStr(l_nSize) + ' byte')
      else
        ShowMessage('Error');
    end;

    <출처 : http://www.swissdelphicenter.ch/torry/showcode.php?id=2276>


  • Profile
    장창원 2007.07.26 19:17

    답변 감사합니다.

    프로세스를 찾고 정보를 구하는 방식이 굉장히 다양하다는 걸 알았습니다.

    질문 올린 이후에도 계속 여기저기 찾아봤었거든요 ^^;;

    다시 감사드립니다.