【问题标题】:When I use an IQueryable function, it significantly increase the time of the query当我使用 IQueryable 函数时,它会显着增加查询时间
【发布时间】:2012-07-01 08:21:16
【问题描述】:

当我执行以下操作时:

var query = from a in OBJ where a.ID == ID select c;

它做到了

var query = (from a in OBJ where a.ID == ID select c).SingleOrDefault();

当我使用 FirstOrDefault() 时也会发生同样的情况。

【问题讨论】:

    标签: c# performance linq oracle entity-framework


    【解决方案1】:

    这个:

    var query = from a in OBJ where a.ID == ID select c;
    

    ...只是代表查询。它根本不执行它。它应该超快快——不仅仅是“不到一秒”,而是“几乎无法估量”。

    这个:

    var query = (from a in OBJ where a.ID == ID select c).SingleOrDefault();
    

    ...获取实际数据,这意味着它必须执行查询。

    通常,LINQ 在可能的情况下使用延迟执行。这只是一个例子。搜索 LINQ 延迟执行,您将获得 loads 的文章点击量来阅读。深入研究最适合您阅读风格的那个:)

    【讨论】:

    • 现在我的数据库中有
    • @Bob.:我怀疑如果您使用调试器,您会发现大约需要 3 秒,这是您运行的第一个查询。后续查询应该快得多,而且我希望不在调试器中运行时也不会花费那么长时间。我怀疑大部分时间实际上是在加载和 JIT 处理一堆东西。
    • 我在有和没有 IQueryable 的情况下都试过了,这就是我在毫秒内得到的总体结果(第一次调用,第二次调用,第三次调用)。使用 IQueryable 函数 #1 - 4930, 2584, 2467 #2 - 4988, 2445, 2478 #3 - 4618, 2823, 2449 没有 IQueryale 函数 #1 - 2355, 83, 62
    • @Bob.: 你说的“有和没有 IQueryable”是什么意思?因为您已经在代码中使用 IQueryable 函数(Where)。你明白我的回答吗?您的代码不执行 SingleOrDefault 不执行查询。将其与实际有效的查询进行比较是没有意义的。
    • 我很惊讶它需要 2.5 秒才能完成工作。那还在调试器中吗?数据库在哪里?你有没有分析过任何东西来弄清楚时间的去向?
    猜你喜欢
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多