7

ウェブサイトで、クラスがある場合:

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

私が持っているページで:

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

クエリは何回コンパイルされますか?ページが読み込まれるたびに...?アプリケーションに入ったら...?

4

5 に答える 5

4

静的メンバーであるため、クラスがアプリドメインに読み込まれるときに1回。

于 2011-02-08T12:09:46.983 に答える
1

それを見てコンパイルされます。一度言います。なぜ再コンパイルする必要があるのでしょうか?それがコンパイルされたクエリのポイントではありませんか?

コンパイルされたクエリが静的であるとすると、アプリケーションインスタンス/ライフタイムごとに1回です。注:寿命は重複する場合があります。

于 2011-02-08T12:09:37.013 に答える
1

静的変数なので、AppDomainごとに1回言います。

于 2011-02-08T12:09:49.097 に答える
1

AllTagsクエリをこのように定義すると、コンパイルは1回だけになります。JulieLermanによるWebアプリケーションおよびWebサービスでコンパイルされたクエリに関するこのブログ投稿を確認してください。

于 2011-02-08T12:12:59.890 に答える
-1

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

「静的メンバーは、静的メンバーに初めてアクセスする前、および静的コンストラクターが呼び出される場合はその前に初期化されます。」

したがって、ページが読み込まれるたびに最大でコンパイルされます。クラスには静的コンストラクターがないため、実際に静的メンバーにアクセスするまでコンパイルしないでください。(MSDNによると。)

しかし、それはコンパイルされますか?インスタンス化されたクラスから静的メンバーをロードしようとしているようです。

于 2011-02-08T12:11:10.503 に答える