Kontrollieren des Ressourcenverbrauchs und Verbessern der LeistungControlling Resource Consumption and Improving Performance

In diesem Thema werden verschiedene Eigenschaften in unterschiedlichen Bereichen der Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Architektur beschrieben, die den Ressourcenverbrauch kontrollieren und Einfluss auf die Leistungsmetriken haben.This topic describes various properties in different areas of the Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) architecture that work to control resource consumption and affect performance metrics.

Eigenschaften, die den Ressourcenverbrauch in WCF einschränkenProperties that Constrain Resource Consumption in WCF

Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) wendet Einschränkungen auf bestimmte Typen von Prozessen an, entweder zum Zwecke der Sicherheit oder der Leistung. applies constraints on certain types of processes for either security or performance purposes. Diese Einschränkungen treten in zwei Hauptformen auf, jeweils als Kontingente und Drosselungen.These constraints come in two main forms, either quotas and throttles. Kontingente sind Beschränkungen, die sobald Sie erreicht oder überschritten eine sofortige Ausnahme irgendwann im System verursachen.Quotas are limits that when reached or exceeded trigger an immediate exception at some point in the system. Schränkt sind Beschränkungen, die nicht sofort durch eine Ausnahme ausgelöst werden können.Throttles are limits that do not immediately cause an exception to be thrown. Stattdessen wird beim Erreichen einer Drosselungsbeschränkung der Prozess fortgesetzt, jedoch innerhalb der durch den Drosselungswert festgelegten Grenzen.Instead, when a throttle limit is reached, processing continues but within the limits set by that throttle value. Diese eingeschränkte Verarbeitung löst möglicherweise an anderer Stelle eine Ausnahme aus, dies hängt jedoch von der jeweiligen Anwendung ab.This limited processing might trigger an exception elsewhere, but this depends upon the application.

Zusätzlich zu der Unterscheidung zwischen Kontingenten und Drosselungen befinden sich einige einschränkende Eigenschaften auf der Serialisierungsebene, auf der Transportebene und auf der Anwendungsebene.In addition to the distinction between quotas and throttles, some constraining properties are located at the serialization level, some at the transport level, and some at the application level. Beispielsweise wird das Kontingent TransportBindingElement.MaxReceivedMessageSize, das von allen vom System bereitgestellten Transportbindungselementen implementiert wird, standardmäßig auf 65.536 Byte festgelegt, um böswillige Clients daran zu hindern, Denial-of-Service-Angriffe gegen einen bestimmten Dienst zu starten und dadurch einen überhöhten Speicherbedarf zu verursachen.For example, the quota TransportBindingElement.MaxReceivedMessageSize, which is implemented by all system-supplied transport binding elements, is set to 65,536 bytes by default to hinder malicious clients from engaging in denial-of-service attacks against a service by causing excessive memory consumption. (I. d. R. können Sie die Leistung erhöhen, indem Sie diesen Wert herabsetzen.)(Typically, you can increase performance by lowering this value.)

Ein Beispiel für ein Serialisierungskontingent ist die DataContractSerializer.MaxItemsInObjectGraph-Eigenschaft, die die maximale Anzahl an Objekten angibt, die das Serialisierungsprogramm in einem einzigen ReadObject-Methodenaufruf serialisiert oder deserialisiert.An example of a serialization quota is the DataContractSerializer.MaxItemsInObjectGraph property, which specifies the maximum number of objects that the serializer serializes or deserializes in a single ReadObject method call. Ein Beispiel für eine Drosselung auf Anwendungsebene ist die ServiceThrottle.MaxConcurrentSessions-Eigenschaft, die standardmäßig die Anzahl der gleichzeitigen sitzungsbasierten Kanalverbindungen auf "10" beschränkt.An example of an application-level throttle is the ServiceThrottle.MaxConcurrentSessions property, which by default restricts the number of concurrent sessionful channel connections to 10. (Anders als bei den Kontingenten setzt die Anwendung die Verarbeitung fort, wenn dieser Drosselungswert erreicht ist, jedoch akzeptiert sie keine neuen sitzungsbasierten Kanäle, was bedeutet, dass neue Clients erst dann eine Verbindung herstellen können, wenn einer der anderen sitzungsbasierten Kanäle beendet wurde.)(Unlike the quotas, if this throttle value is reached, the application continues processing but accepts no new sessionful channels, which means that new clients cannot connect until one of the other sessionful channels is ended.)

Diese Steuerelemente wurden dafür entwickelt, übliche Gegenmaßnahmen gegen bestimmte Arten von Angriffen einzuleiten oder die Leistungsmetriken wie Speicherbeanspruchung, Startzeit usw. zu verbessern.These controls are designed to provide an out-of-the-box mitigation against certain types of attacks or to improve performance metrics such as memory footprint, start-up time, and so on. Jedoch können diese Steuerelemente, je nach Anwendung, auch eine Beeinträchtigung der Anwendungsleistung zur Folge haben oder dazu führen, dass die Anwendung gar nicht mehr funktioniert.However, depending on the application, these controls can impede service application performance or prevent the application from working at all. Zum Beispiel kann eine Anwendung, die für das Videostreaming entworfen wurde, die standardmäßige TransportBindingElement.MaxReceivedMessageSize-Eigenschaft leicht überschreiten.For example, an application designed to stream video can easily exceed the default TransportBindingElement.MaxReceivedMessageSize property. Dieses Thema liefert einen Überblick über die verschiedenen Steuerelemente für Anwendungen aller WCFWCF-Ebenen. Außerdem werden verschiedene Methoden beschrieben, Informationen darüber anzufordern, ob eine Einstellung Ihre Anwendung behindert, und es wird erklärt, wie unterschiedliche Probleme behoben werden können.This topic provides an overview of the various controls applied to applications at all levels of WCFWCF, describes various ways to obtain more information about whether a setting is hindering your application, and describes ways to correct various problems. Die meisten Drosselungen und einige Kontingente sind auf der Anwendungsebene verfügbar, auch wenn die Basiseigenschaft eine Serialisierungs- oder Transportbeschränkung ist.Most throttles and some quotas are available at the application level, even when the base property is a serialization or transport constraint. So können Sie z. B. die DataContractSerializer.MaxItemsInObjectGraph-Eigenschaft mithilfe der ServiceBehaviorAttribute.MaxItemsInObjectGraph-Eigenschaft der Dienstklasse festlegen.For example, you can set the DataContractSerializer.MaxItemsInObjectGraph property using the ServiceBehaviorAttribute.MaxItemsInObjectGraph property on the service class.

Hinweis

Wenn Sie ein bestimmtes Problem haben, lesen Sie zuerst die Schnelleinstieg zur Problembehandlung in WCF um festzustellen, ob das Problem (und eine Lösung) dort aufgeführt ist.If you have a particular problem, you should first read the WCF Troubleshooting Quickstart to see whether your problem (and a solution) is listed there.

Eigenschaften, mit denen Serialisierungsprozesse eingeschränkt sind in aufgeführt Sicherheitsüberlegungen zu Daten.Properties that restrict serialization processes are listed in Security Considerations for Data. Eigenschaften, die den Verbrauch von Ressourcen, die im Zusammenhang mit Transporte einschränken in aufgelisteten Transportkontingente.Properties that restrict the consumption of resources related to transports are listed in Transport Quotas. Eigenschaften, die den Verbrauch von Ressourcen auf der Anwendungsschicht einschränken, gehören zur ServiceThrottle-Klasse.Properties that restrict the consumption of resources at the application layer are the members of the ServiceThrottle class.

Die Standardeinstellungen für die vorangehenden Werte wurden ausgewählt, um eine grundlegende Funktionalität für viele verschiedene Anwendungstypen zu ermöglichen und gleichzeitig einen Schutz vor häufig auftretenden Sicherheitsproblemen zu bieten.The defaults of the preceding values have been chosen to enable basic application functionality across a wide range of application types while providing basic protection against common security issues. Jedoch überschreiten die verschiedenen Anwendungs-Designs möglicherweise eine oder mehrere Drosselungseinstellungen, obwohl die Anwendung ansonsten sicher ist und wie gewünscht funktionieren würde.However, different application designs might exceed one or more throttle settings although the application otherwise is secure and would work as designed. In einem solchen Fall müssen Sie feststellen, welche Drosselungswerte auf welcher Ebene überschritten werden. Legen Sie anschließend angemessene Maßnahmen zur Erhöhung des Anwendungsdurchsatzes fest.In these cases, you must identify which throttle values are being exceeded and at what level, and decide on the appropriate course of action to increase application throughput.

In der Regel wird beim Schreiben und Debuggen der Anwendung die ServiceDebugBehavior.IncludeExceptionDetailInFaults-Eigenschaft in der Konfigurationsdatei oder programmgesteuert auf true festgelegt.Typically, when writing the application and debugging it, you set the ServiceDebugBehavior.IncludeExceptionDetailInFaults property to true in the configuration file or programmatically. Dies weist WCFWCF an, Dienstausnahmestapelüberwachungen zum Anzeigen an die Clientanwendung zurückzugeben.This instructs WCFWCF to return service exception stack traces to the client application for viewing. Diese Funktion meldet die meisten Ausnahmen auf Anwendungsebene so, dass angezeigt wird, welche Kontingenteinstellungen möglicherweise beteiligt sind, falls das Problem hierdurch verursacht wurde.This feature reports most application-level exceptions in such a way as to display which quota settings might be involved, if that is the problem.

Einige Ausnahmen treten während der Laufzeit außerhalb der Sichtbarkeit der Anwendungsschicht auf und werden nicht mithilfe dieses Mechanismus zurückgegeben. Möglicherweise werden sie auch nicht von einer benutzerdefinierten System.ServiceModel.Dispatcher.IErrorHandler-Implementierung gehandhabt.Some exceptions happen at run time below the visibility of the application layer and are not returned using this mechanism, and they might not be handled by a custom System.ServiceModel.Dispatcher.IErrorHandler implementation. Wenn Sie in einer Entwicklungsumgebung wie Microsoft Visual Studio arbeiten, werden die meisten dieser Ausnahmen automatisch angezeigt.If you are in a development environment like Microsoft Visual Studio, most of these exceptions are displayed automatically. Allerdings können einige Ausnahmen maskiert werden, durch die Entwicklung von umgebungseinstellungen wie z. B. die nur mein Code Einstellungen in Visual Studio 2005.However, some exceptions can be masked by development environment settings such as the Just My Code settings in Visual Studio 2005.

Unabhängig von den Fähigkeiten Ihrer Entwicklungsumgebung können Sie die Funktionen der WCFWCF-Ablaufverfolgung und -Nachrichtenprotokollierung verwenden, um alle Ausnahmen zu debuggen und die Leistung Ihrer Anwendung zu verbessern.Regardless of the capabilities of your development environment, you can use capabilities of WCFWCF tracing and message logging to debug all exceptions and tune the performance of your applications. Weitere Informationen finden Sie unter Using an Ihre Anwendung beheben Tracing.For more information, see Using Tracing to Troubleshoot Your Application.

Leistungsprobleme und XmlSerializerPerformance Issues and XmlSerializer

Dienste und Clientanwendungen, die Datentypen verwenden, die mit dem XmlSerializer serialisiert werden können, generieren und kompilieren für diese Datentypen während der Laufzeit Code, was zu einem verlangsamten Start führen kann.Services and client applications that use data types that are serializable using the XmlSerializer generate and compile serialization code for those data types at run time, which can result in slow start-up performance.

Hinweis

Vorab generierter Serialisierungscode kann nur in Clientanwendungen und nicht in Diensten verwendet werden.Pre-generated serialization code can be used only in client applications and not in services.

Die ServiceModel Metadata Utility Tool (Svcutil.exe) können startleistung für diese Anwendungen durch Generieren der erforderlichen Serialisierungscode aus den kompilierten Assemblys für die Anwendung zu verbessern.The ServiceModel Metadata Utility Tool (Svcutil.exe) can improve start-up performance for these applications by generating the necessary serialization code from the compiled assemblies for the application. Weitere Informationen finden Sie unter wie: Verbessern der Start Time des WCF-Clientanwendungen mit dem XmlSerializer.For more information, see How to: Improve the Startup Time of WCF Client Applications using the XmlSerializer.

Leistungsprobleme beim Hosten von WCF-Diensten unter ASP.NETPerformance Issues When Hosting WCF Services Under ASP.NET

Wird ein WCF-Dienst unter IIS und ASP.NET gehostet, können sich die Konfigurationseinstellungen von IIS und ASP.NET auf den Durchsatz und die Speicherbeanspruchung des WCF-Diensts auswirken.When a WCF service is hosted under IIS and ASP.NET, the configuration settings of IIS and ASP.NET can affect the throughput and memory footprint of the WCF service. Weitere Informationen finden Sie unterFor more information aboutDie Leistung von ASP.NET finden Sie unter verbessern die Leistung von ASP.NET. ASP.NET performance, see Improving ASP.NET Performance. Eine Einstellung, durch die sich unbeabsichtigte Folgen ergeben können, ist MinWorkerThreads. Hierbei handelt es sich um eine Eigenschaft der ProcessModelSection.One setting that might have unintended consequences is MinWorkerThreads, which is a property of the ProcessModelSection. Verfügt die Anwendung über eine feste oder über eine geringe Anzahl von Clients, lässt sich durch Festlegen von MinWorkerThreads auf "2" bei einem Computer mit mehreren Prozessoren, dessen CPU-Auslastung sich nahe bei 100 Prozent bewegt, möglicherweise ein Leistungsschub beim Durchsatz erzielen.If your application has a fixed or small number of clients, setting MinWorkerThreads to 2 might provide a throughput boost on a multiprocessor machine that has a CPU utilization close to 100%. Dieser Leistungszuwachs bringt jedoch auch einen Nachteil mit sich, da sich dadurch auch eine erhöhte Speicherauslastung ergibt, was zu einer geringeren Skalierbarkeit führt.This increase in performance comes with a cost: it will also cause an increase in memory usage, which could reduce scalability.

Siehe auchSee Also

Verwaltung und DiagnoseAdministration and Diagnostics
Umfangreiche Daten und StreamingLarge Data and Streaming