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 ServerPozná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
ENDIFPoznámka 2
Funkcia %PerfCounterR je vhodná vtedy, ak je predpoklad, že hodnota bude väčšia ako 2 147 483 647.
Súvisiace stránky: