gpt4 book ai didi

c# - Entity Framework - 性能计数

转载 作者:可可西里 更新时间:2023-11-01 08:01:52 25 4
gpt4 key购买 nike

我对 Entity Framework 的性能有一点疑问。

有点像

using (MyContext context = new MyContext())
{
Document DocObject = context.Document.Find(_id);
int GroupCount = context.Document.Where(w=>w.Group == DocObject.Group).ToList().Count();
}

在我的数据库(大约 30k 个数据集)中大约需要 2 秒,而这个

using (MyContext context = new MyContext())
{
Document DocObject = context.Document.Find(_id);
int GroupCount = context.Document.Where(w=>w.Group == DocObject.Group).Count();
}

需要 0.02 秒。

当我的 10 个文档过滤器等待 20 秒时,我检查了我的代码,并将其更改为在 Count() 之前不使用 ToList()

知道为什么 ToList() 这一行需要 2 秒吗?

最佳答案

调用 ToList()然后Count()将:

  • 执行整个SELECT FROM WHERE针对您的数据库
  • 然后将所有结果实体具体化为 .Net 对象
  • 创建一个新的 List<T>包含所有结果的对象
  • 返回 Count 的结果您刚创建的 .Net 列表的属性

调用 Count()针对 IQueryable将:

  • 执行SELECT COUNT FROM WHERE针对您的数据库
  • 返回 Int32行数

显然,如果您只对项目的数量感兴趣(不是项目本身),那么您不应该调用 ToList()首先,因为它会白白占用大量资源。

关于c# - Entity Framework - 性能计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308095/

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