Entity Framework是否是编程时慢的,当你有许多实体类型时?

3

我有一个大约有500个实体类型的模型。现在,我添加了大约2500个实体类型以备将来使用。因此,现在我大约有3000个实体类型。

目前,我的程序与我只有500个实体时的情况相同。我的程序只是构建实体图,即实例化许多实体并通过引用连接它们。

不幸的是,即使我不处理新实体类型的实例,我的程序运行时间也比添加新实体类型之前长约20倍。

是否正确,实体框架中存在实质性开销,并且随着模型中实体数量的增加而显著增长,尽管 DbContext 的生命周期中大部分模型都不会被使用?


1
EF 不知道也不关心实体是否会被使用,它仍然必须对它们进行初始化。3000 看起来很多... - stuartd
是的,第一次使用要长得多。但我只记得第一次之后的用法。你有什么想法,为什么它似乎要慢得多,或者是否可以启用一些监控来了解正在发生的事情,以便我可以获得一些信息? - Henrik Dahl
在所有内容初始化之后出现严重的减速似乎不太对劲。也许这篇文章中的一些内容可以帮助您找到问题:Entity Framework 4、5和6的性能考虑 - sstan
2个回答

1

EF在启动时会对所有已定义的实体进行反射工作(这需要相当长的时间),而不管它们是否真正被使用。因此,如果您发现启动时间(远远)超过正常,则属于正常现象。

如果在后续查询和操作中遇到此延迟,则可能存在其他问题,您需要提供更多信息以获得解决方案。


1
是的,第一次使用要长得多。但我只记得第一次之后的用法。你知道有什么建议我可以寻找,或者你知道Entity Framework是否提供了一些监控正在进行的操作的功能,以便我可以获取一些信息吗? - Henrik Dahl
Entity Framework Profiler可以帮助您 -> https://www.hibernatingrhinos.com/products/EFProf - Andrei Rînea
另外,还有http://miniprofiler.com/这个免费的工具,它是由建造*StackOverflow*的那些人开发的。 - Andrei Rînea

0
你可以尝试在编译时生成“EF Views”,而不是运行时生成。(不确定它是什么,但这是 EF 在启动时做的事情)请参见此处

生成视图 - 生成预编译视图,用于提高 EF 运行时的启动性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接