2011-06-07 17 views
5

Estoy ejecutando un sitio web C# 4.0 que utiliza Entity Framework 4.0 para la interacción de la base de datos. Quiero encontrar las páginas que están causando que Entity Framework haga la mayor cantidad de llamadas a la base de datos (ya que cuantas más llamadas haya, más lenta será la página).¿Cómo puedo encontrar cuántas llamadas de bases de datos está haciendo Entity Framework por solicitud entrante?

Agregaría algún tipo de instrumentación a Entity Framework, los usuarios reales operarían el sitio web por un tiempo, luego analizarían algún tipo de registro para descubrir qué páginas generaron la mayor cantidad de llamadas a la base de datos.

¿Hay algún tipo de contador de rendimiento u otro evento que pueda ser inspeccionado para determinar cuándo una llamada a la base de datos ha sido realizada por Entity Framework?

Respuesta

1

puede probar el Entity Framework Profiler (su propio sitio es here), aunque este no es un producto gratuito, sin embargo, tiene una versión de prueba gratuita de 30 días. Y está escrito por one of the smartest guys around

Sin embargo, marcará problemas, como Seleccionar N + 1 problemas y le advertirá acerca de las malas prácticas.

De la propaganda:

Entity Framework Profiler es un depurador visual en tiempo real que permite a un equipo desarrollo de adquirir una valiosa visión y perspectiva en su uso de Entity Framework. El producto está diseñado con entradas procedentes de muchos de los principales líderes de la industria dentro de la comunidad O/M . Las alertas se presentan de una manera concisa de revisión de código indicando patrones de uso incorrecto por su aplicación . Para optimizar sus esfuerzos para corregir el mal uso, que proporcionamos enlaces a la sección problemática código que activó la alerta

otra vez de la propaganda (en respuesta a la observación):

Utilizando el Entity Framework Profiler es fácil. En primer lugar, debemos hacer que la aplicación que conocemos tenga en cuenta el generador de perfiles. Luego, simplemente inicie el generador de perfiles .

Preparación de una aplicación para ser perfilado

añadir una referencia a la montaje HibernatingRhinos.Profiler.Appender.dll, situada en el descargable zip. En el inicio de la aplicación (Application_Start en aplicaciones web , Programa.Principales en Windows aplicaciones/consola, o el constructor de aplicaciones para aplicaciones WPF), active lo siguiente:

HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize(); 

EDITAR

parece que se puede inicializar el generador de perfiles de conexión de perfiles . usar esto para inicializar su lugar (de here):

HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.InitializeOfflineProfiling(filename); 

continuación, cargue el archivo resultante en el generador de perfiles.

Esto parece que debería darle lo que quiere.

+0

interesante, pero ¿cómo logra el perfilador de Entity Framework su instrumentación? Esa es realmente la parte importante para mí. – Mike

+0

actualizado con algo de información del sitio. parece que es algo en vivo, por lo que puede ver lo que está sucediendo a medida que las personas utilizan su sitio. esta herramienta le informará sobre las malas prácticas que detecta y que probablemente le ayuden a determinar dónde están los problemas. –

+0

@Mike agregó la información sobre cómo puede usarlo para hacer perfiles de forma offline, para que pueda hacer lo que quiera y permita que los usuarios usen el sitio por un tiempo, luego revise dónde están los problemas. –

2

Simplemente comience a usar el sql-tracing del lado del servidor. Puede ver exactamente por lo que está trabajando el servidor SQL sin agregar sobrecarga al cliente.

Aquí hay más información: http://msdn.microsoft.com/en-us/library/ms187929.aspx

+0

seguro, pero eso es una gran cantidad de trabajo manual. Preferiría agregar algunos instrumentos, dejar que las personas usen el sitio web por un tiempo y luego ver los resultados más adelante. Con el uso del rastreo no podría distinguir tampoco las llamadas que pertenecen a una página de las que pertenecen a otra. – Mike

+0

Por favor, aclare la pregunta de que está buscando un analizador 'después de los hechos' que debe pasar por varias páginas de Asp.Net y buscar las consultas más pesadas. – CodingBarfield

+1

hecho, pregunta editada. – Mike

1

Su mejor apuesta es un generador de perfiles, para contar SQL Sólo llamadas es posible que utilices la incorporada en el Analizador de SQL (no incluido en SQL Express sin embargo).

Cuestiones relacionadas