Migrera från .NET Framework Windows-prestandaräknare till .NET-mått

.NET Framework-program, som endast körs i Windows, kan använda Prestandaräknare för Windows för att övervaka programmets hälsa och prestanda. I .NET Core och senare versioner tillhandahåller plattformen dock plattformsoberoende alternativ via API:erna EventCounters och System.Diagnostics.Metrics .

Den här artikeln innehåller vägledning om hur du migrerar från Windows-prestandaräknare till de nyare måttsystem som är tillgängliga i moderna .NET-versioner.

En kort historik över .NET-mått

.NET-program kan övervakas med olika mekanismer beroende på .NET-versionen och plattformen:

  • .NET Framework: Använder främst Windows-prestandaräknare (endast Windows)
  • .NET Core 3.0-3.1, .NET 5+: Introducerade EventCounters (plattformsoberoende) och inbyggda körningsmått, nätverksmått och ASP.NET mått med hjälp av dessa API:er
  • .NET 6+: System.Diagnostics.Metrics API har lagts till (plattformsoberoende, OpenTelemetry-kompatibelt)
  • .NET 8+: Inbyggda nätverksmått och ASP.NET mått har lagts till med hjälp av det nya API:et System.Diagnostics.Metrics
  • .NET 9+: Inbyggda körningsmått har lagts till med hjälp av det nya API:et System.Diagnostics.Metrics

De nyare måttsystemen har flera fördelar:

  • Plattformsoberoende åtgärd: Fungerar i Windows, Linux, macOS
  • Containervänlig: Fungerar i containerbaserade miljöer
  • Moderna verktyg: Integrerar med OpenTelemetry- och observerbarhetsplattformar
  • Stöder kopieringsinstallation: Inga ytterligare installationssteg eller behörigheter krävs

Mer information finns i mått-API-jämförelsen.

Samla in metrik i moderna .NET-applikationer

Information om hur du samlar in och analyserar mått finns i guiderna System.Diagnostics.Metrics och EventCounters .

Mappa vanliga Prestandaräknare för Windows till moderna mått

Om övervakningssystemet för .NET Framework-programmet använder Windows Performance Counters som tillhandahålls av runtime måste du välja alternativa EventCounters- eller System.Diagnostics.Metrics-baserade mått istället. Följande tabeller visar alternativ för många vanliga räknare. Alla .NET Framework-räknare har inte portats till nya alternativ. I vissa fall upphörde ofta använda räknare, och i andra fall har implementeringsändringar på plattformen gjort vissa räknare irrelevanta.

Minnesräknare

Prestandaräknare för Windows EventCounter-motsvarighet Motsvarande metrik-API
.NET CLR Memory\# Bytes in all Heaps System.Runtime\GC Heap Size (gc-heap-size) System.Runtime\dotnet.gc.last_collection.heap.size
.NET CLR Memory\# Gen 0 Collections System.Runtime\Gen 0 GC Count (gen-0-gc-count) System.Runtime\dotnet.gc.collections med attribut gc.heap.generation=gen0
.NET CLR Memory\# Gen 1 Collections System.Runtime\Gen 1 GC Count (gen-1-gc-count) System.Runtime\dotnet.gc.collections med attribut gc.heap.generation=gen1
.NET CLR Memory\# Gen 2 Collections System.Runtime\Gen 2 GC Count (gen-2-gc-count) System.Runtime\dotnet.gc.collections med attribut gc.heap.generation=gen2
.NET CLR Memory\% Time in GC System.Runtime\% Time in GC since last GC (time-in-gc) System.Runtime\dotnet.gc.pause.time (beräkna som procentandel av total tid)
.NET CLR Memory\# Total committed Bytes Ingen System.Runtime\dotnet.gc.last_collection.memory.committed_size
.NET CLR Memory\Large Object Heap Size System.Runtime\LOH Size (loh-size) System.Runtime\dotnet.gc.last_collection.heap.size med attribut gc.heap.generation=loh
.NET CLR Memory\Allocated Bytes/sec System.Runtime\Allocation Rate (alloc-rate) Beräkna hastighet från System.Runtime\dotnet.gc.heap.total_allocated

Anmärkning

dotnet.gc.pause.time tillåter en förbättrad beräkning som undviker vissa oönskade beteenden i det äldre % Time in GC måttet. % Time in GC beräknade 100 * pause_time_in_most_recent_GC / time_between_most_recent_two_GCs. I vissa fall skulle två grupprincipobjekt uppstå mycket nära varandra och generera ett högt värde baserat på en liten icke-representativ del av det totala tidsintervallet. gc.heap.pause.time ackumulerar den totala tid som GC har pausat programtrådar hittills i en process, vilket gör det möjligt att beräkna GC-paustiden under ett uppmätt tidsintervall. Detta är ett sannare mått på GC-omkostnader, men ändringen i beräkningen innebär att måtten kanske inte matchar även när det underliggande GC-beteendet är oförändrat.

JIT- och laddningsräknare

Prestandaräknare för Windows EventCounter-motsvarighet Motsvarande metrik-API
.NET CLR Jit\# of Methods Jitted System.Runtime\Methods Jitted Count (methods-jitted-count) System.Runtime\dotnet.jit.compiled_methods
.NET CLR Jit\IL Bytes Jitted System.Runtime\IL Bytes Jitted (il-bytes-jitted) System.Runtime\dotnet.jit.compiled_il.size
.NET CLR Loading\Current Assemblies System.Runtime\Number of Assemblies Loaded (assembly-count) System.Runtime\dotnet.assembly.count
.NET CLR Jit\Total # of IL Bytes Jitted System.Runtime\IL Bytes Jitted (il-bytes-jitted) System.Runtime\dotnet.jit.compiled_il.size

Trådräknare

Prestandaräknare för Windows EventCounter-motsvarighet Metrik-API motsvarighet
.NET CLR LocksAndThreads\Current Queue Length System.Runtime\ThreadPool Queue Length (threadpool-queue-length) System.Runtime\dotnet.thread_pool.queue.length
.NET CLR LocksAndThreads\Contention Rate / sec System.Runtime\Monitor Lock Contention Count (monitor-lock-contention-count) Beräkna hastighet från System.Runtime\dotnet.monitor.lock_contentions

Undantagsräknare

Prestandaräknare för Windows EventCounter-motsvarighet Motsvarande metrik-API
.NET CLR Exceptions\# of Exceps Thrown / sec System.Runtime\Exception Count (exception-count) Beräkna hastighet från System.Runtime\dotnet.exceptions
.NET CLR Exceptions\# of Exceps Thrown Ingen System.Runtime\dotnet.exceptions

Socket-nätverksräknare

Prestandaräknare för Windows EventCounter-motsvarighet Motsvarande mått-API
.NET CLR Networking\Bytes Received System.Net.Sockets\Bytes Received (bytes-received) Ingen
.NET CLR Networking\Bytes Sent System.Net.Sockets\Bytes Sent (bytes-sent) Ingen
.NET CLR Networking\Connections Established System.Net.Sockets\Outgoing Connections Established (outgoing-connections-established) Ingen
.NET CLR Networking\Datagrams Received System.Net.Sockets\Datagrams Received (datagrams-received) Ingen
.NET CLR Networking\Datagrams Sent System.Net.Sockets\Datagrams Sent (datagrams-sent) Ingen

DNS-nätverksräknare

Prestandaräknare för Windows EventCounter-motsvarighet Motsvarande metrik-API
.NET CLR Networking\DNS Lookups System.Net.NameResolution\DNS Lookups Requested (dns-lookups-requested) Summera hinkarna i histogrammet i System.Net.NameResolution\dns.lookup.duration
.NET CLR Networking\DNS Resolution Time System.Net.NameResolution\Average DNS Lookup Duration (dns-lookups-duration) System.Net.NameResolution\dns.lookup.duration

HttpWebRequest-räknare

HttpWebRequest har ersatts av HttpClient. Information om vilka mått som är inbyggda finns i HttpClient EventCounters och System.Diagnostics.Metrics.

ASP.NET räknare

ASP.NET har ändrats dramatiskt mellan .NET Framework och .NET Core. Många räknare är föråldrade eller mäts annorlunda än tidigare. Information om vilka mått som är inbyggda finns i ASP.NET EventCounters och System.Diagnostics.Metrics.

Nästa steg