Cómo mejorar el rendimiento de los servicios de datos de WCF

Soy nuevo en WCF Data Services, así que he estado jugando. Después de algunas pruebas iniciales, estoy decepcionado por el rendimiento de mi servicio de datos de prueba.

Me doy cuenta de que debido a que un WCF DS está basado en HTTP, hay una sobrecarga inherente en el protocolo, pero mis pruebas siguen siendo mucho más lentas de lo que esperaría:

Ambiente:

Todo en una caja: portátil de cuatro núcleos de 64 bits con 4 GB de RAM con W7. Máquina decente.Pequeña base de datos SQL (SQLExpress 2008 R2) con 16 tablas ... la tabla bajo prueba tiene 243 filas.Alojé mi servicio de prueba en IIS con todos los valores predeterminados.

Código:

He creado un modelo de Entity Framework (DataContext) para esta base de datos (código de acciones de VS2010).He creado un servicio de datos basado en este modelo.He creado un cliente que tiene una referencia de servicio directo (ObjectContext) para este servicio (código de stock de VS2010)En el cliente también puedo llamar al modelo EF directamente y también usar Native SQL (ADO.NET SqlConnection)

Plan de prueba:

Cada iteración se conecta a la base de datos (hay una opción para reutilizar las conexiones), consulta todas las filas de la tabla de destino ("EVENTOS") y luego las cuenta (lo que obliga a realizar cualquier extracción diferida).Ejecutar durante 25 iteraciones cada una para SQL nativo (SqlConnection / SqlCommand), Entity Framework (DataContext) y WCF Data Services (ObjectContext).

Resultados:

25 iteraciones de SQL nativo: 436 ms25 iteraciones de Entity Framework: 656ms25 iteraciones de WCF Data Services: 12110ms

Ay. Eso es aproximadamente 20 veces más lento que EF.

Dado que WCF Data Services es HTTP, no hay oportunidad para la reutilización de la conexión HTTP, por lo que el cliente se ve obligado a volver a conectarse al servidor web para cada iteración. Pero seguramente hay más cosas aquí que eso.

EF en sí es bastante rápido y es el mismo código / modelo EF que se reutiliza tanto para el servicio como para las pruebas de cliente directo a EF. Habrá algunos gastos generales para la serialización y deserialización de Xml en el servicio de datos, ¡pero eso es todo! He tenido un buen rendimiento con la serialización Xml en el pasado.

Voy a ejecutar algunas pruebas con codificaciones JSON y Protocol-Buffer para ver si puedo obtener un mejor rendimiento, pero tengo curiosidad por saber si la comunidad tiene algún consejo para acelerar esto.

No soy fuerte con IIS, ¿entonces quizás hay algunos ajustes de IIS (cachés, agrupaciones de conexiones, etc.) que se pueden configurar para mejorar esto?

Respuestas a la pregunta(8)

Su respuesta a la pregunta