07
Září

Několik dní zpět jsem se v Delphi zaobíral jedním problémem a narazil při tom na potřebu ověřit, zda určitá část kódu nealokuje při pakovaném běhu stále více paměti. Jistě hned namítnete, že to je přece vidět v TaskMangeru. Souhlasím, ale proč si to nevypsat hned do programu a nemuset se tak přepínat do jiného okna?!

Celkem rychle jsem narazil na tuto stránku, kde je funkce vracející požadovaný údaj:

uses PsAPI ...
//current memory size of the current process in bytes
function CurrentMemoryUsage: Cardinal;
var
  pmc: TProcessMemoryCounters;
begin
  pmc.cb := SizeOf(pmc) ;
if GetProcessMemoryInfo(GetCurrentProcess, @pmc, SizeOf(pmc)) then
    Result := pmc.WorkingSetSize
else
    RaiseLastOSError;
end;

Pro čitelné zobrazení pak už jen stačí volat:

ShowMessage(FormatFloat('Memory used: ,.# K', CurrentMemoryUsage / 1024)) ;

Poznámka: Další položky v TProcessMemoryCounters:

  • PageFaultCount – počet chyb stránkování.
  • PeakWorkingSetSize – the peak working set size, in bytes.
  • WorkingSetSize – aktuální pracovní paměť programu v bytech.
  • QuotaPeakPagedPoolUsage – The peak paged pool usage, in bytes.
  • QuotaPagedPoolUsage – The current paged pool usage, in bytes.
  • QuotaPeakNonPagedPoolUsage – The peak nonpaged pool usage, in bytes.
  • QuotaNonPagedPoolUsage – The current nonpaged pool usage, in bytes.
  • PagefileUsage – využití stránkovacího souboru.
  • PeakPagefileUsage – místo alokované ve stránkovacím souboru v bytech.

Rozdíl oproti hodnotě v TaskManageru

Toto je způsobeno tím, že TaskManager neukazuje aktuální velikost programem používané paměti, ale její “working set”, který je lehce nepřěsný.

Zdroj: About.com


Žádné komentáře

Zanechat vzkaz

Hledáte něco?

Použijte formulář níže k prohledání stránky:

Stále jste nenašli, co jste chtěli? Zanechte komentář nebo nás kontaktuje a my už s tím něco uděláme!