【问题标题】:Cache Linq to Entities execution plan with Entity Framework 4使用 Entity Framework 4 将 Linq 缓存到实体执行计划
【发布时间】:2013-01-04 00:14:15
【问题描述】:

我正在分析一个 ASP.NET Web 应用程序,我注意到我的 EF4 执行计划没有被缓存。每次加载页面时,都会重新编译所有 Linq 表达式,如下面的屏幕截图所示。

有什么方法可以告诉 EF4 缓存这些执行计划?

编辑:

这就是我的查询的样子:

var objs = db.Table
    .Include("OtherTable")
    .Where(g =>
        (someId != null || g.ID == someId) &&
        (g.ObjType == someType) &&
        (/* etc */))
    .ToList();

【问题讨论】:

    标签: c# entity-framework-4 linq-to-entities dbcontext


    【解决方案1】:

    看看Query Plan Caching。如果您的查询创建效率低下,它们可能不会被缓存。

    此外,每个执行计划都按应用程序域缓存。所以在 ASP.Net 中,这与 AppPool 相同,如果 AppPool 关闭或重新启动,缓存将被清除。

    【讨论】:

    • 我不确定您的链接是否适用于我的案例。我不是手动编写 SQL。我用一些代码更新了我的问题。
    • 您为什么不认为该链接适用?它仅在动态查询的上下文中讨论原始 SQL。其余的适用于 Linq-to-Entities。
    • +1 用于清除缓存时,还有 cache eviction (part 3.2.2) 确保缓存仅包含 800 个条目
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2012-06-19
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多