实体框架性能问题

时间:2018-08-10 02:44:44

标签: c# asp.net-mvc entity-framework-6

我正在使用Entity Framework 6(代码优先)的C#ASP.NET MVC应用程序上工作。我们有一个具有多个子对象的模型,其中包括一个从基类继承的对象。有一个网页可从该模型生成视图(将其映射到视图模型之后)。数据是通过这样的调用获取的:

_context.TableName.Include(includes..).FirstOrDefaultAsync(i => i.Id == id);

有多个呼叫.Include。由于模型的复杂性,Entity Framework会生成大量查询。

第一次运行代码,大约需要4.5至5秒。页面的后续视图导致数据访问逻辑在大约450到550毫秒内运行(使用Stopwatch类进行概要分析)。

但是,如果我添加一个循环以在初始获取后重复拉回完全相同的数据,则每次调用大约需要12到15毫秒。

我认为这仅仅是因为这些调用显然是从Entity Framework的缓存中返回对象。也就是说,无需调用数据库或实现。因此,我添加了逻辑以在循环的每次迭代之间处理上下文,并每次都创建一个新的上下文。

在SQL Profiler下运行此命令显示了从实体框架到数据库的大量调用。但是结果是一样的。

这使我认为有一些机会可以优化我们所缺少的性能。有谁知道为什么在浏览网页时数据访问逻辑与在循环中(从同一网页调用中)运行完全相同的逻辑之间需要花费多长时间之间存在差异?

创建新上下文不会完全“重置”实体框架吗?必须有一些缓存或其他方式来解释巨大的性能差异。

非常感谢。

0 个答案:

没有答案