c# - 查询后的实体框架性能
问题描述
我在实体中有一个类结构,看起来像这样:
public class Parent
{
public int Id { get; set; }
public List<Child> Children { get; set; }
//Lots more fields....
}
public class Child
{
public int Id { get; set; }
public int ParentId { get; set; }
[ForeignKey("ParentId")]
public Parent Parent { get; set; }
//Lots more fields....
}
然后我使用以下代码对这些表运行查询:
Context.Database.Log = s => Debug.Print(s);
var ALL = Stopwatch.StartNew();
var query = context.Parent.Include(x => x.Children).Where(x => //Whatever...).ToList()();
ALL.Stop();
Context.Database.Log = null;
查询调试的输出告诉我查询也需要 773 毫秒,例如不到一秒,但计时器告诉我整个过程需要 2 秒。
鉴于此,我假设额外的一秒左右是 Entity 将数据映射到对象所需的时间 - 任何人都可以确认这是否正确?
更重要的是 - 我的问题是,我有什么选择来减少这个时间?
请注意,此代码:
Context.Database.Log = s => Debug.Print(s);
将执行的实际 SQL 输出到 Visual Studio 中的命令窗口。
解决方案
鉴于此,我假设额外的一秒左右是 Entity 将数据映射到对象所需的时间 - 任何人都可以确认这是否正确?
是的,虽然 Entity Framework 上的映射加载时间有所改善,但仍然需要时间。
根据@Mikael Eliasson 的回答 [ 1 ],
- 您可以使用缓存数据库模型
- 您可以生成预编译视图
- 您可以使用 n-gen 生成实体框架的预编译版本以避免抖动(我没有尝试这种方法)
- 您可以寻找将 DbContext 拆分为多个部分,并根据需要使用多个 DbContexes。
希望这可以帮助
推荐阅读
- google-sheets - 为 Google 表格气泡图设置最大气泡大小
- c# - 检测到某个单词时删除消息
- sql - 您如何访问或选择 Data_Type 的比例和精度?
- functional-programming - 不使用反向返回列表中最后一个元素的非尾递归函数?
- python - 从 python 生成 minecraft server.dat 文件
- time-complexity - O(N(logN)^4) 的增长速度是否比 O(N^3) 快?
- c# - Sonarqube LinesTo Cover C#(测试)
- json - 使用从日志文件中隐藏 JsonValue
- python - 使用枚举替换无值会导致相同的答案
- reactjs - react-icons/fa 安装失败:尝试导入错误:“FaStar”未从“react-icons/fa”导出