So verbessern Sie die Leistung von WCF-Datendiensten

Ich bin neu bei WCF Data Services, habe also gespielt. Nach einigen ersten Tests bin ich von der Leistung meines Testdatendienstes enttäuscht.

Ich stelle fest, dass ein WCF-DS HTTP-basiert ist und das Protokoll einen Overhead verursacht, aber meine Tests sind immer noch viel langsamer als erwartet:

Umgebung

lles auf einer Box: Quad-Core-64-Bit-Laptop mit 4 GB RAM und W7. Menschenwürdige Maschine.Small SQL-Datenbank (SQLExpress 2008 R2) mit 16 Tabellen ... Die zu testende Tabelle enthält 243 Zeilen.Hosted meinen Testdienst in IIS mit allen Standardeinstellungen.

Code

Ich habe ein Entity Framework-Modell (DataContext) für diese Datenbank erstellt (Stock Codegen von VS2010). Ich habe einen Datendienst basierend auf diesem Modell erstellt. Ich habe einen Client erstellt, der über eine direkte Servicereferenz (ObjectContext) für diesen Service verfügt (Stock Codegen von VS2010).m Client kann ich das EF-Modell auch direkt aufrufen und auch Native SQL (ADO.NET SqlConnection) verwende

Versuchsplan

Jede Iteration stellt eine Verbindung zur Datenbank her (es besteht die Möglichkeit, Verbindungen erneut zu verwenden), fragt alle Zeilen in der Zieltabelle ab ("EVENTS") und zählt sie dann (wodurch alle zurückgestellten Abrufe ausgeführt werden müssen). Führen Sie jeweils 25 Iterationen für Native SQL (SqlConnection / SqlCommand), Entity Framework (DataContext) und WCF Data Services (ObjectContext) aus.

Ergebnisse

25 Iterationen von Native SQL: 436ms 25 Iterationen von Entity Framework: 656ms 25 Iterationen von WCF Data Services: 12110ms

Autsch. Das ist ungefähr 20x langsamer als EF.

a es sich bei den WCF-Datendiensten um HTTP handelt, gibt es keine Möglichkeit zur Wiederverwendung von HTTP-Verbindungen, sodass der Client bei jeder Iteration gezwungen ist, erneut eine Verbindung zum Webserver herzustellen. Aber hier ist sicherlich noch mehr los.

EF selbst ist ziemlich schnell und es wird derselbe EF-Code / dasselbe EF-Modell sowohl für den Dienst- als auch für den Direkt-zu-EF-Client-Test verwendet. Der Aufwand für die Xml-Serialisierung und -Deserialisierung im Datendienst wird etwas höher sein, aber so viel!?! Ich habe in der Vergangenheit mit der XML-Serialisierung gute Ergebnisse erzielt.

Ich werde einige Tests mit JSON- und Protocol-Buffer-Codierungen durchführen, um zu sehen, ob ich eine bessere Leistung erzielen kann. Ich bin jedoch gespannt, ob die Community Tipps hat, wie ich dies beschleunigen kann.

Ich bin nicht stark mit IIS, also gibt es vielleicht einige IIS-Optimierungen (Caches, Verbindungspools usw.), die eingestellt werden können, um dies zu verbessern?

Antworten auf die Frage(16)

Ihre Antwort auf die Frage