2011-02-08 32 views
7

En una página web, si tengo una clase:¿Cuántas veces una consulta compilada debe recompilar durante el ciclo de vida de una aplicación?

public class Provider 
{ 
    static readonly Func<Entities, IEnumerable<Tag>> AllTags = 
     CompiledQuery.Compile<Entities, IEnumerable<Tag>> 
     (
      e => e.Tags 
     ); 

    public IEnumerable<Tag> GetAll() 
    { 
     using (var db = new Entities()) 
     { 
      return AllTags(db).ToList(); 
     } 
    } 
} 

En una página que tengo:

protected void Page_Load(object sender, EventArgs ev) 
{ 
    (new Provider()).GetAll(); 
} 

¿Cuántas veces se compilará la consulta? Cada vez que la página se carga ...? Una vez en la aplicación ...?

+0

@Martinho Fernandes: Eso es solo la mitad de la pregunta ... Estás (erróneamente) suponiendo que el OP no sabe cómo funcionan los campos estáticos en ASP.NET. – leppie

+0

Parece que ya está obteniendo la respuesta a esta pregunta en las respuestas a [su última pregunta] (http://stackoverflow.com/questions/4932594/when-should-i-use-a-compiledquery). ¿Qué intentas preguntar de manera diferente aquí? –

+0

@Cody Gray, buena edición! ¡Gracias! :) – BrunoLM

Respuesta

1

Seeing it is compiled. Yo diría una vez. ¿Por qué debería ser recompilado? ¿No es ese el punto de las consultas compiladas?

Dada la consulta compilada es estática, una vez por instancia de aplicación/toda la vida. Nota: los tiempos de vida pueden superponerse.

4

ya que es un miembro estático, una vez cuando la clase se carga en el dominio de aplicación.

1

yo diría que una vez por dominio de aplicación, ya que es una variable estática.

-1

http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx#Y696

"Los miembros estáticos se inicializan antes de que se acceda al miembro estático, por primera vez, y antes de que el constructor estático, en su caso se llama".

Así se compilará como máximo cada vez que se carga la página. Como su clase no tiene un constructor estático, no debería compilarse hasta que realmente tenga acceso al miembro estático. (De acuerdo con MSDN.)

Sin embargo, ¿eso compilar? Parece que está intentando cargar un miembro estático de una clase instanciada.

+0

constructor estático no es obligatorio. otro punto es válido –

+0

No dije que era obligatorio. Dije que no tenía uno. Y de acuerdo con la documentación, eso significa que no configura los campos estáticos hasta que se utilizan. – William

1

Si define su Alltags consulta de esta manera se compilará una sola vez. Compruebe esto blog post sobre consultas compiladas en aplicaciones web y servicios web por Julie Lerman.

Cuestiones relacionadas