PerfCounter

PerfCounter

Funkcie %PerfCounter, %PerfCounterR


Funkcia

Funkcia vráti hodnotu uvedeného "Performance Counter".

Deklarácia

INT %PerfCounter( TEXT in text )

 

REAL %PerfCounterR( TEXT in text )

Parametre

text

Definícia Performance Counter.

Popis

Definícia countra má nasledovnú syntax:

\\ComputerName\Object(instance)\Counter

Ak sa sleduje Counter na lokálnom počítači, prvá časť udávajúca meno počítača sa môže vynechať. Ak má objekt len jednu inštanciu, časť "(instance)" sa vynecháva.
Ak je funkcia %PerfCounter (%PerfCounterR) volaná často (viac ako raz za sekundu), vracia nesprávne hodnoty (0).
V prípade potreby volania funkcie každú sekundu pre viac systémových informácií, je riešením vykonať každé volanie na inom riadku v ESL skripte.

Príklad

%PerfCounter("\D2000 Server\MemUsed") ; vráti hodnotu pamäte použitej procesom D2000 Server

Poznámka 1

Niekedy (pre špecifické počítadlá) vracia funkcia %PerfCounter pri prvom volaní vždy nulu - napr. pre počítadlo záťaže procesora: " \Processor(_Total)\% User Time". Vtedy je nutné volať túto funkciu dvakrát za sebou v slučke s oneskorením (veľkosť treba nastaviť empiricky) medzi volaniami.
Pre počítadla iného charakteru (napr. "\Memory\Available MBytes", "\LogicalDisk(C:)\% Free Space" alebo "\Process(_Total)\Handle count") funguje táto funkcia bez problémov a vracia korektnú hodnotu hneď pri prvom volaní.
Zrejme je problém s počítadlami, ktoré vyžadujú uplynutie určitého času (na zber vzorky dát) medzi registrovaním si počítadla a načítaním jeho hodnoty).

Príklad takéhoto kódu, ktorý volá funkciu %PerfCounter dvakrát s oneskorením 0.1 sekundy, pokiaľ pri prvom volaní bola načítaná hodnota 0:

 

INT _i REAL _result FOR _i=1 TO 2 DO_LOOP _result := %PerfCounter("\Processor(_Total)\% User Time") IF _result\VLD THEN IF _result=0 & _i=1 THEN ; workaround - pri prvom volaní (napr. na \Processor (_Total)\% User Time) vracia 0 DELAY 0.1 [s] ELSE EXIT_LOOP ENDIF ELSE EXIT_LOOP ENDIF END_LOOP

 

Tento kód nefunguje - preto, lebo sa nevolá dvakrát ten istý riadok, tá istá inštancia PerfCounter funkcie:

 

INT _i REAL _result _result := %PerfCounter(_counter) IF _result\VLD THEN IF _result=0 THEN ; NEFUNKCNY workaround - pri prvom volaní (napr. na \Processor(_Total)\% User Time) vracia 0 DELAY 0.05 [s] _result := %PerfCounter(_counter) ENDIF ENDIF

Poznámka 2

Funkcia %PerfCounterR je vhodná vtedy, ak je predpoklad, že hodnota bude väčšia ako 2 147 483 647.