繁体   English   中英

实体框架6生成模型性能

[英]Entity Framework 6 generating model performance

我在网络开发中遇到EF6问题。 在索引页面中,我需要执行一个查询以显示一些信息,问题是第一个查询在内存上创建了模型,并花费了10秒钟以上的时间来完成(不在大型托管中)。 人们如何应对? 通过直接查询获取第一笔数据? 读取txt文件?

默认情况下,在EF中,它具有快照更改跟踪机制。

它通过每次从数据库加载实体状态时保存实体状态来工作。 例如,当调用SaveChanges方法时,实体框架将检查当前上下文中的所有实体,并将它们与保存状态进行比较。

有时候这可能会有点慢...在上下文中,ctor会这样:

this.Configuration.AutoDetectChangesEnabled = false;

这会关闭实体跟踪,这会减少此处的一些开销。

但是,如果它是相当静态的数据,也许您可​​以在应用程序启动时使用缓存来保留数据,那么您只需要将其从内存中拉出并每隔x小时/分钟刷新一次即可。

此外,顺便说一句,如果可以的话,转到AZURE,它不会花费我期望的更多,并且在部署等方面使用起来会容易得多。

我要做两件事:1)分析您的查询,看看它是否真的需要10秒。 请查看LINQPad,Glimpse或Stackify前缀,以查看查看从EF生成的SQL查询的方法。 查询效率低下可能是您的问题。 在数据库中使用视图或设置索引可能会解决此问题。

2)如果要运行一次此查询,然后对后续请求使用内存中的副本,请使用MemoryCache 第一个请求仍然会影响性能,但是只要将缓存设置为最后一个,所有后续请求的速度都会非常快。 使用此功能时会导致内存不足,因为您会将结果长期保存在内存中。 如果每个访问者在索引页面上都有一个动态请求,则将占用大量内存。 如果所有用户的请求都相同,这将是一个不错的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM