查询后的实体框架性能

时间:2018-12-07 12:00:03

标签: c# entity-framework

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

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);

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

1 个答案:

答案 0 :(得分:1)

  

鉴于此,我假设Entity将数据映射到对象所需的时间大约是一秒钟,有人可以确认这是否正确吗?

是的,尽管在Entity Framework上改进了映射的加载时间,但仍然需要时间。

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

  • 您可以使用缓存的Db模型
  • 您可以生成预编译视图
  • 您可以使用n-gen生成EntityFramework的预编译版本,以免出现打乱现象(我没有尝试过这种方法)
  • 您可以根据需要将DbContext拆分为多个片段,并使用多个DbContex。

希望这会有所帮助