2011-02-08 16 views
7

na stronie internetowej, jeśli mam klasy:Ile razy skompilowane zapytanie należy rekompilować podczas cyklu życia aplikacji?

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(); 
     } 
    } 
} 

na stronie mam:

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

Ile razy zapytanie zostanie skompilowany? Za każdym razem, gdy ładuje się strona ...? Raz w aplikacji ...?

+0

@Martinho Fernandes: To tylko połowa pytania ... Jesteś (niesłusznie) zakładając, że OP nie jest świadomy, jak statyczne pola działają w ASP.NET. – leppie

+0

Wygląda na to, że już otrzymujesz odpowiedź na to pytanie w odpowiedzi na [twoje ostatnie pytanie] (http://stackoverflow.com/questions/4932594/when-should-i-use-a-compiledquery). O co tu chodzi? –

+0

@Cody Grey, dobra edycja! Dziękuję Ci! :) – BrunoLM

Odpowiedz

1

Widok jest kompilowany. Powiedziałbym raz. Dlaczego miałaby zostać ponownie skompilowana? Czy nie jest to kwestia kompilowanych zapytań?

Biorąc pod uwagę, że skompilowane zapytanie jest statyczne, raz dla każdej instancji aplikacji/okresu istnienia. Uwaga: Żywotność może się pokrywać.

4

ponieważ jest to element statyczny, jeden raz, gdy klasa jest ładowana w domenie aplikacji.

1

Powiedziałbym raz na AppDomain, ponieważ jest to zmienna statyczna.

-1

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

„statyczne członkowie są inicjowane zanim element statyczny jest dostępny po raz pierwszy, a przed statycznym konstruktorze, jeśli w ogóle jest tzw.”

Dlatego skompiluje się co najwyżej za każdym razem, gdy strona zostanie załadowana. Ponieważ twoja klasa nie ma statycznego konstruktora, nie powinna się kompilować, dopóki nie uzyskasz dostępu do statycznego elementu. (Według MSDN.)

Jednak to się kompiluje? Wygląda na to, że próbujesz załadować statyczny element członkowski z instancji klasy.

+0

Konstruktor statyczny nie jest obowiązkowy. inny punkt jest ważny –

+0

Nie powiedziałem, że to obowiązkowe. Powiedziałem, że go nie ma. Zgodnie z dokumentacją oznacza to, że nie tworzy ona pól statycznych, dopóki nie zostaną użyte. – William

1

Jeśli zdefiniujesz w ten sposób zapytanie AllTag, zostanie ono skompilowane tylko raz. Sprawdź to blog post dotyczące kompilacji zapytań w aplikacjach internetowych i usługach internetowych autorstwa Julie Lerman.

Powiązane problemy