Använda registerfunktioner för att förbruka räknardata
Använd registerfunktioner för att samla in prestandadata från den särskilda HKEY_PERFORMANCE_DATA
registernyckeln.
Prestandadata lagras inte i registret. Att anropa registerfunktionerna gör att systemet samlar in data från lämplig prestandadataprovider.
Not
Du bör normalt inte använda registerfunktionerna för att hämta räknardata. I stället bör du använda PDH-funktionerna (Performance Data Helper). PDH-funktionerna är enklare att använda och undviker många prestanda- och tillförlitlighetsproblem som kan uppstå genom felaktig användning av registerfunktionerna.
Not
Du kan inte använda registerfunktionerna om du skriver Windows OneCore-appar. Använd i stället PerfLib V2 Konsumentfunktioner.
Registerfunktionerna är lågnivå-API:et för att samla in data från V1-leverantörer. Registerfunktionerna stöder också insamling av data från V2-leverantörer via ett översättningslager som anropar V2-konsumentfunktioner.
Om du vill hämta prestandadata från det lokala systemet anropar du funktionen RegQueryValueEx. Använd HKEY_PERFORMANCE_DATA
som nyckel. Det första anropet öppnar nyckeln. Du behöver inte uttryckligen öppna nyckeln först.
Om du vill hämta prestandadata från ett fjärrsystem anropar du funktionen RegConnectRegistry. Använd fjärrsystemets datornamn och använd HKEY_PERFORMANCE_DATA
som nyckel. Det här anropet hämtar en nyckel som representerar prestandadata för fjärrsystemet. Använd den här nyckeln i stället för HKEY_PERFORMANCE_DATA
-nyckeln för att hämta data.
Se till att använda funktionen RegCloseKey för att stänga handtaget till nyckeln när du är klar med att hämta prestandadata. Detta är viktigt för både lokala och fjärranslutna fall:
-
RegCloseKey(HKEY_PERFORMANCE_DATA)
stänger faktiskt inte ett registerhandtag, men rensar alla cachelagrade data och frigör de inlästa prestanda-DLL:erna. -
RegCloseKey(hkeyRemotePerformanceData)
stänger handtaget till fjärrdatorns register.
Viktig
Anropa inte RegCloseKey(HKEY_PERFORMANCE_DATA)
under DLL_PROCESS_DETACH
.
Du använder parametern lpValueName
för funktionen RegQueryValueEx för att ange den information som ska hämtas. I följande tabell visas de värden som du kan ange för lpValueName
. Observera att värdesträngarna inte är skiftlägeskänsliga.
Värde | Beskrivning |
---|---|
Global |
Hämtar prestandadata för alla prestandaobjekt som registrerats på datorn förutom de som ingår i kategorin Costly . |
OLD_Global |
Windows Vista och senare: Hämtar prestandadata för alla V1- prestandaobjekt som registrerats på datorn förutom de som ingår i kategorin Costly . Använd detta i stället för Global för att undvika att samla in onödiga V2-providerdata när du vet att data av intresse kommer från en V1-provider. |
n1 n2 ... |
Hämtar prestandadata för ett eller flera prestandaobjekt. Ange det decimalindex som är associerat med varje objekt som du vill hämta i en blankstegsavgränsad lista. Om du till exempel vill hämta system- och minnesobjekt och du har fastställt att indexen för motsvarande namnsträngar är 2 och 4 anger du strängen "2 4" . Observera att frågan kan returnera ett annat antal objekt än du begärde. Detta kan inträffa om det angivna objektet inte är tillgängligt, om det angivna objektet är beroende av en annan objekttyp eller om en provider på annat sätt returnerar data som inte har begärts direkt. Till exempel är trådar beroende av processer, så om du begär data från Thread -objektet kommer resultatet att innehålla data från Process -objektet. |
Counter n |
Hämtar namnsträngar för den angivna språkidentifieraren, t.ex. engelska för Counter 9 . Använd de returnerade namnsträngarna för att hitta indexet som motsvarar ett angivet namn eller för att hitta namnet som motsvarar ett visst index. Se Hämta räknarnamn och hjälptext för mer information. Observera att den returnerade listan innehåller både objektnamn (räknaruppsättning) och räknarnamn – det finns inget enkelt sätt att avgöra om ett namn är ett objektnamn eller ett räknarnamn. |
Help n |
Hämtar hjälpsträngar för den angivna språkidentifieraren, t.ex. engelska för Help 9 . Använd de returnerade hjälpsträngarna för att hitta beskrivningar som motsvarar objekt (räknaruppsättning) eller hjälpindex för räknare. Mer information finns i Åtkomst av räknarnamn och hjälptext. |
Costly |
Inaktuell: Hämtar prestandadata för objekttyper vars data är dyra att samla in när det gäller processortid eller minnesanvändning. Den här samlingen kan ta flera minuter på en dator med hög belastning. Du bör utföra samlingen på en arbetstråd om ditt program behöver svara användaren under den här datainsamlingen. |
MetadataGlobal |
Windows 10 20H1 och senare: Hämtar metadata för alla prestandaobjekt som registrerats på datorn förutom de som ingår i kategorin Costly . |
OLD_MetadataGlobal |
Windows 10 20H1 och senare: Hämtar metadata för alla V1- prestandaobjekt som registrerats på datorn förutom de som ingår i kategorin Costly . |
MetadataCostly |
Windows 10 20H1 och senare: Hämtar metadata för kostsamma prestandaobjekt. |
OLD_MetadataCostly |
Windows 10 20H1 och senare: Hämtar metadata för kostsamma V1- prestandaobjekt. |
Mer information om formatet för prestandadata som registret returnerar finns i Performance Data Format.
Ett exempel som hämtar namn och beskrivningar av registrerade räknare på datorn finns i Hämta räknarnamn och Hjälptext.
Ett exempel som kommer åt komponenterna i prestandadata finns i Visa objekt, instans och räknarnamn.
Ett exempel som hämtar, beräknar och skriver ut räknarvärden finns i Hämta räknardata och Beräkna räknarvärden.
Metadatainsamling
Windows 10 20H1 lägger till stöd för insamlingsåtgärder med endast metadata. De här åtgärderna är avsedda att användas när du skapar en lista över prestandaobjekt och räknare som är tillgängliga på en dator.
- Endast metadatainsamling kan vara snabbare än motsvarande fullständig datainsamling eftersom den kan hoppa över insamling av instansdata från objekt som stöder insamling av endast metadata.
- Endast metadatainsamling använder mindre minne än motsvarande fulldatainsamling eftersom den inte behöver utrymme för att returnera instansdata från objekt som endast stöder insamling av metadata.
- Endast metadatainsamling är mer fullständig än motsvarande fullständig datainsamling eftersom den returnerar listan över tillgängliga räknare även om det inte finns några instanser av objekt som endast stöder insamling av metadata.
Tips
Lämplig användning av endast metadatainsamling är särskilt viktigt när du samlar in data från servrar med många processer eller trådar. En normal Global
samling måste samla in och returnera information om varje process och tråd i systemet, medan MetadataGlobal
samling inte behöver samla in process- eller trådinformation.
Funktionerna PDH (Performance Data Helper) använder automatiskt insamling med endast metadata när den fastställer vilken uppsättning prestandaobjekt som är tillgängliga på en dator.
Operativsystemets stöd för åtgärder som endast gäller metadata anges av ett icke-nollvärde i registervärdet HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata
. Om det här värdet inte finns eller är inställt på 0
använder du en fullständig datainsamling (t.ex. Global
) i stället för en samling med endast metadata (t.ex. MetadataGlobal
).
Alla prestandaobjekt stöder inte endast metadatainsamling. När du begär en MetadataGlobal
samling kontrollerar Windows varje prestandaobjekt om det finns stöd för endast metadata (vilket anges av ett icke-nollvärde i HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata
registervärdet). Om prestandaobjektet inte stöder endast metadatainsamling utför Windows en normal datainsamling från objektet. Om prestandaobjektet stöder endast metadatainsamling utför Windows en samling med endast metadata från objektet. De data som returneras till dig för en fråga med endast metadata innehåller sedan PERF_OBJECT_TYPE
block från både fullständig data- och metadatainsamling. De PERF_OBJECT_TYPE
blocken kan innehålla eller utelämna instansinformation, beroende på om blocket har samlats in från en provider som har eller inte stöder frågor med endast metadata.
Data som returneras från en samling med endast metadata är samma som data från en normal samling förutom:
- Det
NumInstances
fältet förPERF_OBJECT_TYPE
struct är antingenPERF_METADATA_MULTIPLE_INSTANCES
(som anger att objektet stöder 0 eller fler namngivna instanser) ellerPERF_METADATA_NO_INSTANCES
(vilket indikerar att objektet alltid har en namnlös instans). - Det kommer inte att finnas några
PERF_INSTANCE_DEFINITION
-block efterPERF_OBJECT_TYPE
-strukturen.
Perflib
Registernyckeln HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
stöder flera DWORD
värden relaterade till insamling av prestandaräknare.
Dessa bör vanligtvis vara oetade för standardbeteende, men kan konfigureras av en administratör efter behov för specifika scenarier.
-
Configuration Flags
: Standardvärdet är 0. Kan ställas in på en kombination av följande flaggor för att aktivera särskilt beteende:-
0x01
: Testa inte plugin-program för databuffertjusteringsfel. Som standard validerar systemet buffertjusteringen av plugin-program. -
0x02
: Inaktivera inte plugin-program automatiskt. Som standard inaktiverar systemet plugin-program som kraschar eller uppvisar felaktigt beteende. -
0x04
: Validera inte integriteten för plugin-bufferten. Som standard söker systemet efter överskridanden av plugin-bufferten. -
0x08
: Sök inte efter tidsgränser för plugin-program. Som standard kontrollerar systemet efter plugin-program som hänger sig.
-
-
Disable Performance Counters
: Standardvärdet är 0. Om värdet är 1 inaktiveras samlingen med V1-prestandaräknare för systemet. -
ExtCounterTestLevel
: Standardvärdet är 4. Styr hur mycket validering systemet utför för att skydda mot felaktigt plugin-beteende. Mer information finns iPM_COLLECT_PROC
.