首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为了保持性能,我可以在EntityFramework中的ObjectSet上使用多少个?

为了保持性能,我可以在EntityFramework中的ObjectSet上使用多少个?
EN

Stack Overflow用户
提问于 2011-04-02 15:02:51
回答 2查看 13.3K关注 0票数 49

我对我的个人资料页面使用以下LINQ查询:

代码语言:javascript
复制
var userData = from u in db.Users
                        .Include("UserSkills.Skill")
                        .Include("UserIdeas.IdeaThings")
                        .Include("UserInterests.Interest")
                        .Include("UserMessengers.Messenger")
                        .Include("UserFriends.User.UserSkills.Skill")
                        .Include("UserFriends1.User1.UserSkills.Skill")
                        .Include("UserFriends.User.UserIdeas")
                        .Include("UserFriends1.User1.UserIdeas")
                               where u.UserId == userId
                               select u;

它有一个很长的对象图,并使用了许多包含。它现在运行得很完美,但是当网站有很多用户时,它会对性能产生很大影响吗?

我应该用其他方式来做吗?

EN

回答 2

Stack Overflow用户

发布于 2011-04-02 16:42:10

是的会的。如果Include在主表表行上展开了多个详细信息行,请避免使用Include。

我相信EF会将查询转换为一个大连接,而不是几个查询。因此,您最终将在details表的每一行上复制主表数据。

例如: Master -> Details。假设master有100行,Details有5000行(每个master有50行)。

如果延迟加载详细信息,则返回100行(size: master) + 5000行(size: details)。

如果使用.Include("Details"),则返回5000行(大小: master + details)。基本上,主部分被复制超过50次。

如果包含多个表,则会向上乘以。

检查EF生成的SQL。

票数 8
EN

Stack Overflow用户

发布于 2011-04-02 15:11:23

我建议您执行负载测试并测量站点在压力下的性能。如果您对每个请求执行复杂的查询,则可以考虑缓存一些结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5521749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档