2010-04-23 86 views
1

以下是我正在查看的性能测试。我有8种不同的实体,每种类型都是表。一些实体包含超过10万行。实体框架协会查杀性能

这个特定的应用程序在客户端上做了几次递归计算,所以我认为最好是预加载数据而不是延迟加载。

如果没有关联,我可以在大约3秒钟内加载整个数据库。当我以任何方式添加关联时,表演开始大幅下降。

我以相同的方式加载所有数据(只需在连接到上下文的实体上调用toList())。我使用edmx生成的类和自我跟踪实体运行测试,并得到了类似的结果。

我相信如果我自己试着去处理这些关联,就像我在数据集中那样,性能问题就会消失。另一方面,我很肯定这不是实体框架打算如何使用。任何想法或想法?

+0

你能更清楚地了解你正在加载什么数据,为什么?请显示代码。当你没有真正解释你在做什么时,很难告诉你如何更快地做出事情。 – 2010-04-23 12:58:07

+0

您可以发布一些关于您如何进行查询的代码示例吗?你使用的是哪个版本的实体框架?如果4,你是否使用延迟加载? – 2010-04-23 15:25:14

回答

0

使用关系加载实体将比加载实体慢很多,即使相关实体没有在加载时获取,因为在一种情况下需要创建用于跟踪关系的复杂对象,也许是简单的值的类型像另一个int。你看到它慢多少?

但是...

预加载10万行听起来像是一个非常糟糕的主意。当你做ToList()时,你已经消除了EF和SQL可以对你的数据做任何优化查询的机会。你的计算是否总是需要检查所有数据?您是否尝试过没有预加载并检查它正在生成的查询?你是否尝试过使用。包括只包含你知道你需要的相关对象?

如果你给它一个机会,EF将会对缓存做出明智的决定。