System.Diagnostics.PerformanceData Obor názvů
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
K poskytnutí dat čítačů použijte třídy v tomto oboru názvů. Čítače se používají k zveřejnění metrik výkonu pro uživatele, jako je monitorování výkonu. Obor názvů neobsahuje třídy pro využívání dat čítače. Úplný popis architektury čítačů výkonu najdete v tématu Čítače výkonu.
Třídy
| Name | Description |
|---|---|
| CounterData |
Obsahuje nezpracovaná data pro čítač. |
| CounterSet |
Definuje sadu logických čítačů. |
| CounterSetInstance |
Vytvoří instanci logických čítačů definovaných ve CounterSet třídě. |
| CounterSetInstanceCounterDataSet |
Obsahuje kolekci hodnot čítačů. |
Výčty
| Name | Description |
|---|---|
| CounterSetInstanceType |
Určuje, zda sada čítačů umožňuje více instancí, jako jsou procesy a fyzické disky, nebo jednu instanci, jako je paměť. |
| CounterType |
Definuje možné typy čítačů. Každému čítači je přiřazen typ čítače. Typ čítače určuje způsob výpočtu, průměrování a zobrazení dat čítače. |
Příklady
Následující příklad ukazuje jednoduchý manifest:
<!-- <?xml version="1.0" encoding="UTF-16"?> -->
<instrumentationManifest xsi:schemaLocation="http://schemas.microsoft.com/win/2004/08/events eventman.xsd"
xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:trace=http://schemas.microsoft.com/win/2004/08/events/trace>
<instrumentation>
<counters xmlns=http://schemas.microsoft.com/win/2005/12/counters>
<provider
applicationIdentity = "provider1.exe"
providerType = "userMode"
providerGuid = "{51D1685C-35ED-45be-99FE-17261A4F27F3}">
<counterSet guid = "{582803C9-AACD-45e5-8C30-571141A22092}"
uri = "Microsoft.Windows.System.PerfCounters.Typing"
name = "$(string.CounterSet1.Name)"
description = "$(string.CounterSet1.Description)"
instances = "single">
<counter id = "1"
uri = "Microsoft.Windows.System.PerfCounters.Typing.TotalWords"
name = "$(string.CS1.Counter1.Name)"
description = "$(string.CS1.Counter1.Description)"
type = "perf_counter_rawcount"
detailLevel = "standard"/>
<counter id = "2"
uri = "Microsoft.Windows.System.PerfCounters.Typing.WordsInInterval"
name = "$(string.CS1.Counter2.Name)"
description = "$(string.CS1.Counter2.Description)"
type = "perf_counter_delta"
detailLevel = "standard"/>
<counter id = "3"
uri = "Microsoft.Windows.System.PerfCounters.Typing.LetterAPressed"
name = "$(string.CS1.Counter3.Name)"
description = "$(string.CS1.Counter3.Description)"
type = "perf_counter_rawcount"
detailLevel = "standard"/>
<counter id = "4"
uri = "Microsoft.Windows.System.PerfCounters.Typing.WordsContainingLetterA"
name = "$(string.CS1.Counter4.Name)"
description = "$(string.CS1.Counter4.Description)"
type = "perf_counter_rawcount"
detailLevel = "standard"/>
<counter id = "5"
uri = "Microsoft.Windows.System.PerfCounters.Typing.PercentOfWordsContainingLetterA"
name = "$(string.CS1.Counter5.Name)"
description = "$(string.CS1.Counter5.Description)"
type = "perf_sample_fraction"
baseID = "6"
detailLevel = "standard">
<counterAttributes>
<counterAttribute name = "displayAsReal" />
</counterAttributes>
</counter>
<counter id = "6"
uri = "Microsoft.Windows.System.PerfCounters.Typing.PercentBase"
type = "perf_sample_base"
detailLevel = "standard">
<counterAttributes>
<counterAttribute name = "noDisplay" />
</counterAttributes>
</counter>
</counterSet>
</provider>
</counters>
</instrumentation>
<localization>
<resources culture="en-US">
<stringTable>
<string id="CounterSet1.Name" value="Typing"/>
<string id="CounterSet1.Description" value="Captures simple typing metrics."/>
<string id="CS1.Counter1.Name" value="Total Words Typed"/>
<string id="CS1.Counter1.Description" value="The total number of words typed."/>
<string id="CS1.Counter2.Name" value="Words Typed In Interval"/>
<string id="CS1.Counter2.Description" value="The total number of words typed in the interval."/>
<string id="CS1.Counter3.Name" value="Letter A Pressed"/>
<string id="CS1.Counter3.Description" value="The number of times that the letter A is pressed."/>
<string id="CS1.Counter4.Name" value="Words Containing A"/>
<string id="CS1.Counter4.Description" value="The number of words that contain the letter A."/>
<string id="CS1.Counter5.Name" value="Percent of Words Containing A"/>
<string id="CS1.Counter5.Description" value="The percent of words that contain the letter A in the last interval."/>
</stringTable>
</resources>
</localization>
</instrumentationManifest>
Následující příklad ukazuje jednoduchou implementaci zprostředkovatele manifestu:
using System.Diagnostics.PerformanceData;
private static Guid providerId = new Guid("{51D1685C-35ED-45be-99FE-17261A4F27F3}");
private static Guid typingCounterSetId = new Guid("{582803C9-AACD-45e5-8C30-571141A22092}");
private static CounterSet typingCounterSet; // Defines the counter set
private static CounterSetInstance typingCsInstance; // Instance of the counter set
private static int numberOfLetterAInWord = 0;
. . .
// Create the 'Typing' counter set.
typingCounterSet = new CounterSet(providerId, typingCounterSetId, CounterSetInstanceType.Single);
// Add the counters to the counter set definition.
typingCounterSet.AddCounter(1, CounterType.RawData32, "Total Word Count");
typingCounterSet.AddCounter(2, CounterType.Delta32, "Words Typed In Interval");
typingCounterSet.AddCounter(3, CounterType.RawData32, "A Key Pressed");
typingCounterSet.AddCounter(4, CounterType.RawData32, "Words Containing A");
typingCounterSet.AddCounter(5, CounterType.SampleFraction, "Percent of Words Containing A");
typingCounterSet.AddCounter(6, CounterType.SampleBase, "Percent Base");
// Create an instance of the counter set (contains the counter data).
typingCsInstance = typingCounterSet.CreateCounterSetInstance("Typing Instance");
typingCsInstance.Counters[1].Value = 0;
typingCsInstance.Counters[2].Value = 0;
typingCsInstance.Counters[3].Value = 0;
typingCsInstance.Counters[4].Value = 0;
typingCsInstance.Counters[5].Value = 0;
typingCsInstance.Counters[6].Value = 0;
. . .
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
typingCounterSet.Dispose();
}
// Simple effort to capture letter A key press and words typed.
private void textInput_KeyDown(object sender, KeyEventArgs e)
{
Keys keyData = e.KeyData;
switch (e.KeyData)
{
case Keys.A :
// In the .NET 3.5 Framework, you had to use the
// Value property to set and increment the counter
// value. Beginning with the .NET 4.0 Framework,
// the Value property is safe to use in a multi-
// threaded application.
typingCsInstance.Counters["A Key Pressed"].Value++;
numberOfLetterAInWord++;
break;
case Keys.Enter:
case Keys.Space:
case Keys.Tab:
if (numberOfLetterAInWord > 0)
{
// Beginning with the .NET 4.0 Framework, you
// can use the Increment method to increment
// the counter value by 1. The Increment method
// is safe to use in a multi-threaded
// application.
typingCsInstance.Counters["Words Containing A"].Increment();
typingCsInstance.Counters["Percent of Words Containing A"].Increment();
numberOfLetterAInWord = 0;
}
typingCsInstance.Counters["Percent Base"].Increment();
typingCsInstance.Counters["Total Word Count"].Increment();
typingCsInstance.Counters["Words Typed In Interval"].Increment();
break;
}
}
Poznámky
Třídy v tomto oboru názvů podporují novou architekturu (verze 2.0) pro čítače výkonu, které byly zavedeny v systému Windows Vista. V nové architektuře už poskytovatel nereaguje přímo na žádosti příjemců, ale místo toho pouze udržuje data čítačů. Systém vloží vlákno do procesu poskytovatele, když zprostředkovatel vytvoří instanci sady čítačů; vlákno zodpovídá za zpracování uživatelských požadavků.
Následující kroky ukazují proces zápisu zprostředkovatele čítačů.
Čítače, které poskytovatel poskytuje, jsou definovány v manifestu založeném na jazyce XML. Čítače jsou logicky seskupeny do sad čítačů. Čítače v sadě čítačů jsou identifikovány číselným identifikátorem, který je v sadě čítačů jedinečný. Zprostředkovatel může definovat jednu nebo více sad čítačů. Sada čítačů je identifikována identifikátorem GUID, který je jedinečný pro poskytovatele. Upozorňujeme, že pokud k zápisu poskytovatele použijete tyto třídy:
Atribut zpětného volání elementu zprostředkovatele je ignorován.
Referenční hodnota atributu name prvku counterAttribute je ignorována.
Podrobnosti o zápisu manifestu najdete ve schématu čítačů výkonu.
Po napsání manifestu pomocí nástroje CTRPP zkompilujte manifest (ctrpp provider.man). Nástroj generuje čtyři soubory: .h, .c, .rc a *_r.h. Soubory .h a .c můžete ignorovat. Soubor .rc obsahuje lokalizované řetězce definované v manifestu. Soubory .rc a *_r.h slouží k vytvoření zkompilovaného souboru prostředků (.res), který zahrnete do projektu. Následující volání ukazuje, jak zkompilovat soubor prostředků:
rc /r /i "c:\Program Files\Microsoft SDKs\Windows\v6.0\Include" provider.rcPokud se zobrazí chyba, která odkazuje na sal.h, zkopírujte soubor sal.h ze sady Microsoft Visual Studio, do adresáře, který zadáte pro přepínač /i.
Přidejte cestu ke zkompilovanému souboru prostředků (.res) na stránku vlastností Aplikace projektu.
Napište svého poskytovatele. Následující kroky ukazují volání vytvořená poskytovatelem:
Voláním konstruktoru CounterSet.CounterSet definujte sadu čítačů. Volání této metody pro každou sadu čítačů definovanou v manifestu.
Pro každou sadu čítačů zavolejte jednu z CounterSet.AddCounter metod pro přidání čítačů do sady. Volání této metody pro každý čítač definovaný v čítači sady.
CounterSet.CreateCounterSetInstance Voláním metody vytvořte instanci sady čítačů (instance obsahuje data čítače). Pro sady čítačů s jednou instancí volejte tuto metodu jednou. Pro více sad čítačů instancí zavolejte tuto metodu pro každou instanci, pro kterou potřebujete zadat data čítače (použijte jedinečný název pro každou instanci).
CounterSetInstance.Counters Pomocí vlastnosti můžete získat přístup k datům čítače a nastavit je pro čítač.
Po dokončení poskytovatele pomocí nástroje LodCtr zaregistrujte čítače v počítači. Příklad:
lodctr /m:provider.manPříklad předpokládá, že manifest a spustitelný soubor jsou v aktuálním adresáři.
Třídy v tomto oboru názvů můžete použít na počítačích se systémem Windows Vista a novějšími operačními systémy.