包含在实体框架中的性能问题

时间:2015-06-02 06:06:22

标签: json entity-framework repository-pattern asp.net-web-api2 poco

我正在开发使用Repository Pattern,Web API,AngularJS开发的大型应用程序。在其中一个场景中,我试图从与大约有关系的单个线索中检索数据。 20张桌子。延迟加载是禁用的,所以我使用Include从所有20个表中获取数据。现在,出现性能问题,如果我尝试检索单个记录,则需要大约。 15秒这是一个巨大的性能问题。我正在返回JSON,我的实体用DataContract(IsReference = true)/ Data Member属性修饰。

任何建议都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

由于它的加入方式,Include对性能来说真的很讨厌。

在我的博客文章http://mikee.se/Archive.aspx/Details/entity_framework_pitfalls,_include_20140101

中查看更多信息

总结一下问题,因为EF通过加入来处理Include。这将创建一个结果集,其中每一行都包含每个连接实体的每一列(Some包含空值)。

如果根实体包含大字段(如长文本或二进制文件),则会更加讨厌,因为那个字段会重复。

但是,15秒太过分了。我怀疑还有更多的东西像缺少索引一样。

总结解决方案。我的建议通常是你单独加载每个关系或在多个查询中加载。这样的简单查询应该是每个实体5-30ms,具体取决于您的设置。在这种情况下,它仍然会很慢(如果您查询索引,则为~1s)。如果经常运行此查询(数据库中的Cache,document,json),可能需要以某种方式查看以更好的格式存储此数据。尽管如此,我无法帮助您,因为更新路径会对可能性产生很大影响,因此需要更多信息。

答案 1 :(得分:-1)

通过启用延迟加载,性能得到了改善。