c# – 懒惰与实体框架的加载性能
所以我在DbContext上有以下模型类:
每当我呈现LoanApplication对象的列表时,我都会这样做: var context = new MyContext(); var applications = context.LoanApplications.Where(d => d.PropertyThatIWantToFilter = localVariable); 这返回一个IQueryable,然后我转换为一个ViewModel像我的控制器方法调用: var vm = applications.Select(d => new LoanApplicationViewModel(d)); 在LoanApplicationViewModel构造函数内部,我接受实体对象并进行相应的映射.事实是,由于Solicitors集合是一个导航属性,因此每次实例化新的视图模型时都会调用数据库.每个应用程序的平均律师人数是两个,所以这意味着如果我提供一个列出最后10个应用程序的表,那么该应用程序正在大约到18-20次访问数据库. 我以为必须有一个更好的方式来获取这个集合,所以我改变了我的原始查询,热切地加载集合,如下所示: var applications = context.LoanApplications.Include("Solicitors").Where... 虽然这样将数据库的调用次数减少到只有一个,但是查询速度要慢得多,慢50%. 数据库托管在SQL Azure上,我们实施了瞬态故障处理,但是我想减少对数据库的调用数量,而不会减少响应时间性能. 这里最好的做法是什么? 解决方法
“这里最好的做法是什么?
最好的做法是 >设置!应用程序广泛!绩效目标 现在看起来有点无关紧要,但是从这个角度来看,您在应用程序领域中哪一种加载模式是最佳的,是正确的. 没有渴望/懒惰的“最佳实践”.这就是为什么两个选项都可用.另外,如果tsql是您的瓶颈,而且渴望/懒惰之间的切换还没有达到您的性能目标,那么您需要在SSMS中下载大量其他工具,如查询分析器和查询计划分析器. 对于一些背景: 我是googling“渴望加载缓慢”来到这里.这是我的结果: var foo = _context.Foos //.Include("Answers") //.Include("Attachments") .FirstOrDefault(q => q.Id == key); 渴望加载:106ms 懒惰加载:11ms 5ms 5ms 懒惰加载胜利,故事结束. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |