首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改查找的性能非常差

问修改查找的性能非常差
EN

Stack Overflow用户
提问于 2017-01-24 12:14:58
回答 1查看 52关注 0票数 0

我想创建一个基于从数据库读取的一系列布尔值来修改查找的函数。

我尝试了这样一种方法:

代码语言:javascript
复制
IEnumerable<RootDomain> lookup = db.RootDomains;

//bools are nullable
if (conditions.HasCompanyMatch == true) lookup = lookup.Where(x => x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasCompanyMatch == false) lookup = lookup.Where(x => !x.Companies.Any(c => c.CompanyMatches.Count > 1));
if (conditions.HasEmail == true) lookup = lookup.Where(x => x.EmailMessages.Count() > 1);
// etc.. more bool switches

//very slow when it enumerated in any way
var count = lookup.Count();

它可以工作,但速度非常慢。当枚举查找被枚举时,内存使用率会跳到800mb左右,这需要几分钟的时间,而如果我在一个步骤中完成所有这些工作,只需要几秒钟,内存大约是60mb。

我假设这样做是添加一些递归查询或其他东西,但我不确定。

在不破坏性能的情况下实现这一目标的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 13:29:31

当你链接你的条件时,它会计算每一条语句吗?

我认为将初始查找视为IQueryable将意味着它应该仅在您检索数据(例如您的计数)时进行评估:

代码语言:javascript
复制
IQueryable<RootDomain> lookup = db.RootDomains;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41819894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档