gpt4 book ai didi

.net - LINQ First 与 Find 性能注意事项

转载 作者:行者123 更新时间:2023-12-02 22:29:28 25 4
gpt4 key购买 nike

我们有一个系统可以执行各种复杂和简单的选择查询。

我们做了一些简单的测试并得到了这些结果:

Query 3.9 seconds :
var result = (from temp in context.model
where temp.ID == 1302
select temp).First();

Start Transaction time: 17:54:58.7073806
End Transaction time: 17:55:02.6246046

Query 3.7 seconds :
Model modelResult = context.Model.Find(1302);

Start Transaction time: 17:53:51.1995194
End Transaction time: 17:53:54.8737295

我一直在阅读,试图找出最好的选择。这个网站上有很多关于这个主题的对话,但是,我还没有找到我真正需要的东西。

我知道查询选择是视情况而定的(基于查询的复杂性等),但在我们需要基于不会再次使用的键的单个实体的情况下(意思是,在 Find 的情况下,缓存无关紧要,因为该查询不太可能再次调用)使用直接 LINQ 还是继续使用 Find 更好?

在不使用 Find 时缓存 Find 结果的成本是否太高?我们简单测试的结果是否足够准确,可以假设 Find 在单个实体/键情况下总是更快?

我没有在关闭跟踪的情况下测试 LINQ,这会比给出的两个示例更好吗?

最佳答案

两者并不完全相同。

Find 将检查实体是否已加载到上下文中。如果有,它将只返回它而不执行查询。在这种情况下,它的效率可能会高得多。

但是,如果实体不在上下文中,它会执行更像 SingleOrDefault 的查询,而不是首先执行查询,这将需要从服务器拉回前两个结果。虽然构建查询没有开销,但查询本身可能会因此(非常轻微)变慢,并且结果会有所不同,因为如果有多个匹配项,您将收到错误。

有关更多详细信息和信息,包括生成的查询,请参阅此 Slauma's answer here .

关于.net - LINQ First 与 Find 性能注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com