Delen via


WCF-prestatiemeteritems

Windows Communication Foundation (WCF) bevat een grote set prestatiemeteritems om u te helpen de prestaties van uw toepassing te meten.

Prestatiemeteritems inschakelen

U kunt prestatiemeteritems voor een WCF-service als volgt inschakelen via het configuratiebestand app.config van de WCF-service:

<configuration>  
    <system.serviceModel>  
        <diagnostics performanceCounters="All" />  
    </system.serviceModel>  
</configuration>  

Het performanceCounters kenmerk kan worden ingesteld om een specifiek type prestatiemeteritems in te schakelen. Geldige waarden zijn

  • Alle: Alle categorietellers (ServiceModelService, ServiceModelEndpoint en ServiceModelOperation) zijn ingeschakeld.

  • ServiceOnly: Alleen ServiceModelService-categorietellers zijn ingeschakeld. Dit is de standaardwaarde.

  • Uit: ServiceModel* prestatiemeteritems zijn uitgeschakeld.

Als u prestatiemeteritems wilt inschakelen voor alle WCF-toepassingen, kunt u de configuratie-instellingen in het bestand Machine.config plaatsen. Zie de sectie Over het vergroten van het geheugen voor prestatiemeteritems hieronder voor meer informatie over het configureren van voldoende geheugen voor prestatiemeteritems op uw computer.

Als u WCF-uitbreidbaarheidspunten zoals aangepaste aanroepers voor bewerkingen gebruikt, moet u ook uw eigen prestatiemeteritems verzenden. Dit komt doordat als u een uitbreidbaarheidspunt implementeert, WCF mogelijk niet langer de standaardprestatiemeteritemgegevens in het standaardpad verzendt. Als u geen handmatige ondersteuning voor prestatiemeteritems implementeert, ziet u mogelijk niet de verwachte prestatiemeteritems.

U kunt ook als volgt prestatiemeteritems inschakelen in uw code,

using System.Configuration;  
using System.ServiceModel.Configuration;  
using System.ServiceModel.Diagnostics;  
Configuration config = ConfigurationManager.OpenExeConfiguration(  
    ConfigurationUserLevel.None);  
ServiceModelSectionGroup sg = ServiceModelSectionGroup.GetSectionGroup(config);  
sg.Diagnostic.PerformanceCounters = PerformanceCounterScope.All;  
config.Save();  

Prestatiegegevens weergeven

Als u gegevens wilt bekijken die zijn vastgelegd door de prestatiemeteritems, kunt u de Prestatiemeter (Perfmon.exe) gebruiken die bij Windows wordt geleverd. U kunt dit hulpprogramma starten door naar Start te gaan en op Uitvoeren te klikken en in het dialoogvenster te typenperfmon.exe.

Notitie

Exemplaren van prestatiemeteritems kunnen worden vrijgegeven voordat de laatste berichten zijn verwerkt door de eindpunt-dispatcher. Dit kan ertoe leiden dat prestatiegegevens niet worden vastgelegd voor een paar berichten.

Grotere geheugengrootte voor prestatiemeteritems

WCF maakt gebruik van afzonderlijk gedeeld geheugen voor de prestatiemeteritemscategorieën.

Standaard is afzonderlijk gedeeld geheugen ingesteld op een kwart van de grootte van het globale prestatiemeteritemgeheugen. Het standaardgeheugen voor globale prestatiemeteritems is 524.288 bytes. Daarom hebben de drie WCF-prestatiemeteritems een standaardgrootte van ongeveer 128 kB elk. Afhankelijk van de runtimekenmerken van de WCF-toepassingen op een computer, kan het geheugen van prestatiemeteritems worden uitgeput. Als dit gebeurt, schrijft WCF een fout naar het gebeurtenislogboek van de toepassing. De inhoud van de fout geeft aan dat er geen prestatiemeteritem is geladen en dat de vermelding de uitzondering 'System.InvalidOperationException: Custom counters file view is out of memory'. Als tracering is ingeschakeld op foutniveau, wordt deze fout ook getraceerd. Als het geheugen van prestatiemeteritems is uitgeput, kan het blijven uitvoeren van uw WCF-toepassingen waarvoor prestatiemeteritems zijn ingeschakeld, leiden tot een verslechtering van de prestaties. Als u een beheerder van de computer bent, moet u deze configureren om voldoende geheugen toe te wijzen ter ondersteuning van het maximum aantal prestatiemeteritems dat op elk gewenst moment kan bestaan.

U kunt de hoeveelheid prestatiemeteritemgeheugen voor WCF-categorieën in het register wijzigen. Hiervoor moet u een nieuwe DWORD-waarde met de naam FileMappingSize toevoegen aan de drie volgende locaties en deze instellen op de gewenste waarde in bytes. Start de computer opnieuw op, zodat deze wijzigingen van kracht worden.

  • HKLM\System\CurrentControlSet\Services\ServiceModelEndpoint 4.0.0.0\Performance

  • HKLM\System\CurrentControlSet\Services\ServiceModelOperation 4.0.0.0\Performance

  • HKLM\System\CurrentControlSet\Services\ServiceModelService 4.0.0.0\Performance

Wanneer een groot aantal objecten (bijvoorbeeld ServiceHost) wordt verwijderd, maar wacht op garbagecollection, registreert het PrivateBytes prestatiemeteritem een ongebruikelijk hoog aantal. U kunt dit probleem oplossen door uw eigen toepassingsspecifieke tellers toe te voegen of het performanceCounters kenmerk te gebruiken om alleen servicemeteritems in te schakelen.

Typen prestatiemeteritems

Prestatiemeteritems hebben een bereik van drie verschillende niveaus: Service, Eindpunt en Bewerking.

U kunt WMI gebruiken om de naam van een exemplaar van een prestatiemeteritem op te halen. Bijvoorbeeld:

  • De naam van het servicetellerexemplaren kan worden verkregen via de eigenschap CounterInstanceName van het WMI-service-exemplaar.

  • De naam van het eindpuntitemexemplaren kan worden verkregen via de eigenschap CounterInstanceName van het WMI-eindpuntexemplaren.

  • De naam van het exemplaar van de bewerkingsteller kan worden verkregen via de methode GetOperationCounterInstanceName van het WMI-eindpuntexemplaren.

Zie Windows Management Instrumentation voor diagnostische gegevens gebruiken voor meer informatie over WMI.

Prestatiemeteritems voor services

Serviceprestatiemeteritems meten het servicegedrag als geheel en kunnen worden gebruikt om de prestaties van de hele service te diagnosticeren. Ze zijn te vinden onder het ServiceModelService 4.0.0.0 prestatieobject bij weergave met Prestatiemeter. De exemplaren hebben een naam met het volgende patroon:

ServiceName@ServiceBaseAddress

Een teller in een servicebereik wordt samengevoegd vanuit een teller in een verzameling eindpunten.

Prestatiemeteritems voor het maken van een service-exemplaar worden verhoogd wanneer een nieuwe InstanceContext wordt gemaakt. Houd er rekening mee dat er een nieuwe InstanceContext wordt gemaakt, zelfs wanneer u een niet-activerend bericht (met een bestaande service) ontvangt of wanneer u vanuit een sessie verbinding maakt met een exemplaar, de sessie beëindigt en vervolgens opnieuw verbinding maakt vanuit een andere sessie.

Prestatiemeteritems voor eindpunten

Met prestatiemeteritems voor eindpunten kunt u gegevens bekijken die weerspiegelen hoe een eindpunt berichten accepteert. Ze zijn te vinden onder het ServiceModelEndpoint 4.0.0.0 prestatieobject bij weergave met behulp van de prestatiemeter. De exemplaren hebben een naam met het volgende patroon:

(ServiceName).(ContractName)@(endpoint listener address)

De gegevens zijn vergelijkbaar met wat wordt verzameld voor afzonderlijke bewerkingen, maar worden alleen geaggregeerd over het eindpunt.

Een teller in een eindpuntbereik wordt geaggregeerd van tellers in een verzameling bewerkingen.

Notitie

Als twee eindpunten identieke contractnamen en -adressen hebben, worden ze toegewezen aan hetzelfde tellerexemplaren.

Prestatiemeteritems voor bewerkingen

Prestatiemeteritems voor bewerkingen vindt u onder het ServiceModelOperation 4.0.0.0 prestatieobject wanneer u deze bekijkt met de prestatiemeter. Elke bewerking heeft een afzonderlijk exemplaar. Dat wil zeggen dat als een bepaald contract 10 bewerkingen heeft, er 10 exemplaren van het telleritem aan dat contract zijn gekoppeld. De objectexemplaren hebben een naam met het volgende patroon:

(ServiceName).(ContractName).(OperationName)@(first endpoint listener address)

Met deze teller kunt u meten hoe de aanroep wordt gebruikt en hoe goed de bewerking presteert.

Wanneer tellers zichtbaar zijn in meerdere bereiken, worden gegevens die uit een hoger bereik worden verzameld, samengevoegd met gegevens uit lagere bereiken. Een eindpunt vertegenwoordigt bijvoorbeeld Calls de som van alle bewerkingsaanroepen binnen het eindpunt; Calls bij een service vertegenwoordigt u de som van alle aanroepen naar alle eindpunten binnen de service.

Notitie

Als u dubbele bewerkingsnamen voor een contract hebt, krijgt u slechts één itemexemplaren voor beide bewerkingen.

De WCF-prestatiemeteritems programmeren

Er worden verschillende bestanden geïnstalleerd in de SDK-installatiemap, zodat u programmatisch toegang hebt tot de WCF-prestatiemeteritems. Deze bestanden worden als volgt weergegeven:

  • _ServiceModelEndpointPerfCounters.vrg
  • _ServiceModelOperationPerfCounters.vrg
  • _ServiceModelServicePerfCounters.vrg
  • _SMSvcHostPerfCounters.vrg
  • _TransactionBridgePerfCounters.vrg

Zie De programmeerarchitectuur van prestatiemeteritems voor meer informatie over het programmatisch openen van de tellers.

Zie ook