查询后的实体框架性能



我在实体中有一个类结构,看起来像这样:

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;

查询调试的输出告诉我查询太773ms,例如不到一秒钟,但计时器告诉我整个过程花了2秒钟。

鉴于此,我假设额外的一秒左右是Entity将数据映射到对象中所需的时间——有人能确认这是否正确吗?

更重要的是,我的问题是,我有什么选择来减少这段时间?

请注意,此代码:

Context.Database.Log = s => Debug.Print(s);

将执行的实际SQL输出到visualstudio中的命令窗口。

鉴于此,我假设额外的一秒左右是Entity将数据映射到对象中所需的时间-有人能确认这是否正确吗?

是的,尽管在实体框架上改进了映射的加载时间,但这仍然需要时间。

根据@Mikael Eliasson的回答[1],

  • 您可以使用缓存数据库模型
  • 可以生成预编译视图
  • 您可以使用n-gen生成entityframework的预编译版本,以避免抖动(我没有尝试这种方法(
  • 您可以根据需要将DbContext拆分为多个部分并使用多个DbContex

希望这能帮助

最新更新