/ / C # Požiadavky na výkon PerformanceCounter / Sec nie sú aktualizované - c #, asp.net, iis-7, performancecounter

Žiadosti C / PerformanceCounter C # neboli aktualizované - c #, asp.net, iis-7, performancecounter

Robím program, kde potrebujem získať nejaké hodnoty z počítadla výkonnosti.

Zatiaľ to funguje dobre. Keď som sa však pokúsil získať počítadlo "Žiadosti / Sek." Pre konkrétny server IIS, nezískal som žiadne hodnoty, napríklad jeho neaktualizáciu. Ak sa však v počítači so systémom Windows začiarknem položka „Monitor výkonu“, vidím, že funguje rovnaký počítač.

Tento program má administrátorské práva.

Útržok môjho kódu na získanie tohto počítadla vyzerá takto.

 public static int GetRequest()
{

var cat = PerformanceCounterCategory.GetCategories().FirstOrDefault(s => s.CategoryName.Contains("ASP.NET Apps v4.0.30319"));
var catinstances = cat.GetInstanceNames().First(s => s.Contains("_lm_w3svc_3_root").ToUpper()));
PerformanceCounter cpuCounter = new PerformanceCounter("ASP.NET Apps v4.0.30319", "Requests/Sec", catinstances, true);
return unchecked((int)cpuCounter.NextValue());
}

Ďakujem za Váš čas.

odpovede:

1 pre odpoveď č. 1

Musíte si ponechať inštanciu tohto počítadla výkonnosti, a nie ju obnovovať pri každom hovore.

Nasledujúci kód ponechá počítadlo v statickom člene a túto inštanciu znova použije pri ďalšom volaní na vašu metódu:

static PerformanceCounter _requestCounter; // keep instance around
static PerformanceCounter cpuCounter  // property with lazy init
{
get
{
// initialize if we haven"t done so.
if (_requestCounter == null) {
var cat = PerformanceCounterCategory.GetCategories().FirstOrDefault(s => s.CategoryName.Contains("ASP.NET Apps v4.0.30319"));
var catinstances = cat.GetInstanceNames().First(s => s.ToUpper().Contains("_WEB"));
_requestCounter = new PerformanceCounter("ASP.NET Apps v4.0.30319", "Requests/Sec", catinstances, true);

}
return _requestCounter;
}
}

public static int GetRequest()
{
return unchecked((int)cpuCounter.NextValue());
}