在应用程序的生命周期中,已编译的查询必须重新编译多少次?

发布于 2024-10-16 13:21:17 字数 598 浏览 9 评论 0原文

在网站中,如果我有一个类:

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

查询将被编译多少次?每次页面加载时...?一旦进入应用程序...?

In a website, if I have a class:

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

In a page I have:

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

How many times the query will be compiled? Every time the page loads...? Once in the application...?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

旧伤还要旧人安 2024-10-23 13:21:17

因为它是静态成员,所以当类在应用程序域中加载时。

since it is a static member, once when class is loaded in app domain.

想你的星星会说话 2024-10-23 13:21:17

一看就编译出来了。我想说一次。为什么需要重新编译?这不是编译查询的重点吗?

鉴于编译的查询是静态的,每个应用程序实例/生命周期一次。注意:生命周期可能会重叠。

Seeing it is compiled. I would say once. Why would it need to be recompiled? Isn't that the point of compiled queries?

Given the compiled query is static, once per application instance/lifetime. Note: Lifetimes may overlap.

零度° 2024-10-23 13:21:17

我想说每个 AppDomain 一次,因为它是一个静态变量。

I'd say once per AppDomain, since it's a static variable.

千里故人稀 2024-10-23 13:21:17

如果您以这种方式定义 AllTags 查询,它将仅编译一次。检查这个 关于 Web 应用程序和 Web 服务中的编译查询的博客文章,作者:Julie Lerman。

If you define your AllTags query this way it will be compiled only once. Check this blog post about compiled queries in Web applications and web services by Julie Lerman.

不甘平庸 2024-10-23 13:21:17

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

“静态成员在首次访问静态成员之前初始化,并且在调用静态构造函数之前初始化。”

所以它最多会在每次加载页面时进行编译。由于您的类没有静态构造函数,因此在您实际访问静态成员之前它不应该编译。 (根据 MSDN。)

但是,这能编译吗?您似乎正在尝试从实例化的类加载静态成员。

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

"Static members are initialized before the static member is accessed for the first time, and before the static constructor, if any is called."

So it will compile at most each time the page is loaded. Since your class doesn't have a static constructor, it shouldn't compile until you actually access the static member. (According to MSDN.)

However, does that compile? It appears you are trying to load a static member from an instantiated class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文