c# - EF DataContext:代码执行时间过长
问题描述
我在 dataContext 中有以下属性:
public DbSet<CollectionSite> CollectionSites { get; set; }
其中CollectionSite
有大约 30-40 个属性。
我尝试以下代码:
var query = _context.CollectionSites
.Where(cs =>
cs.IsActive &&
cs.OpenToPublic &&
(NIDACollections == null || cs.NIDACollections == NIDACollections.Value) &&
(SAPCollections == null || cs.SAPCollections == SAPCollections.Value) &&
(observedRequested == null || cs.ObservedCollection == observedRequested.Value) &&
(electronicCC == null || cs.RegulatedElectronicCCF == electronicCC.Value) &&
(alcoholTestType == null || cs.BreathAlcohol == alcoholTestType.Value))
;
所有这些变量(如NIDACollections
etc)在哪里bool?
。这段代码只是创建了IQueryable<CollectionSite>
对象并且不执行对源的请求,但是这段代码正在执行 4-5 秒(i7,16Gb 的 RAM)。为什么这么长?我的代码有什么问题?
解决方案
运行 SqlProfiler,如果您使用带有 Sql server 的 sql server management studio,它内置在工具下,如果您使用其他数据库,请尝试从 EF 上下文记录生成的查询。
获取从您的 Linq 语句生成的查询并直接在数据库上运行它并分析查询计划。查看是什么导致此查询变慢。我的猜测是(由于缺少索引而进行的表扫描)。
推荐阅读
- javascript - 无法在 MacOS Catalina 上安装 Strongloop for Loopback v.3
- python - Keras fit_generator 运行非常缓慢
- java - android.database.sqlite.SQLiteException:没有这样的表:yoga(代码1 SQLITE_ERROR):
- c# - 没有得到ajax数组中的表列表
- laravel - Laravel Mix:配置 Babel 以实现 IE11 兼容性(转换和 polyfill)
- python - 在 Python 中使用点表示法对类方法进行分组
- javascript - slideToggle 在页面加载时激活
- authentication - 仅针对特定帐户使用 Google 进行 ASP.NET Core 身份验证
- git - 空合并冲突
- c++ - 为什么派生类d的对象不能调用类基的受保护成员函数?