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
