VS 2005, C# 2.0, .NET 2.0/3.0, Win2003Installazione di un'istanza totale per i contatori delle prestazioni
Sto cercando di installare una serie di contatori delle prestazioni per un MultiInstance. Ho notato che alcune categorie di contatori delle prestazioni del sistema riescono a mantenere in vita uno "totale" anche quando non ci sono altre istanze. Le app ASP.NET 2.0.50727 sono un esempio.
Quindi ho cercato di duplicare questo. Ho creato la seguente routine in una classe Installer che aggiungo a un'azione personalizzata in un progetto di installazione.
public override void Install(System.Collections.IDictionary stateSaver)
{
//Debugger.Break();
CounterCreationData data = new CounterCreationData("ZCounter", "ZCtrHelp", PerformanceCounterType.NumberOfItems32);
PerformanceCounterCategory.Create("ZCategory", "ZCatHelp", PerformanceCounterCategoryType.MultiInstance, new CounterCreationDataCollection(new CounterCreationData[] { data }));
PerformanceCounter counter = new PerformanceCounter();
counter.CategoryName = "ZCategory";
counter.CounterName = "ZCounter";
counter.InstanceName = "ZTotal";
counter.InstanceLifetime = PerformanceCounterInstanceLifetime.Global;
counter.ReadOnly = false;
counter.RawValue = 0;
base.Install(stateSaver);
}
Se togliere il commento alla linea di Debugger.Break()
, e passo attraverso, posso vedere il contatore è effettivamente creato con il nome di istanza a destra, e Visual Studio Server Explorer mostra l'istanza con l'InstanceLifetime impostato su Globale. Non chiamo il metodo RemoveInstance() nel programma di installazione.
Tuttavia, pochi secondi dopo il completamento del programma di installazione, tale istanza scompare dal Performance Monitor e da VS Server Explorer. Come faccio a farlo bastone? O posso?
Ritengo che questa sia la risposta giusta alla mia domanda. mark is gone; non riesco a selezionarlo come risposta corretta Sapevo che PerfMon non stava creando il contatore _Total, ma non mi era chiaro che c'era sempre un servizio che manteneva il totale contro il vivo. "PerformanceCounterInstanceLifetime.Global" suggerisce che dovrebbe farlo; altrimenti, qual è il punto di quel nome? BTW, non sono affatto contrario a scrivere qualsiasi quantità di codice, servizi o qualsiasi altra cosa. Solo non sapevo che era come si faceva. Mi risento di essere considerato un programmatore pigro. –