c# – 优化foreach循环
发布时间:2020-12-16 01:45:41 所属栏目:百科 来源:网络整理
导读:我有一些代码从数据库中提取记录,然后我做一个简单的比较,检查记录是否匹配特定模块和响应,然后使用计数并显示统计信息.不幸的是,当数据库中的任何记录超过1000条时,它会非常慢. 在nHibernate中,我启用了Lazy加载,这在初始查询时间有所帮助,但是当它到达这个
我有一些代码从数据库中提取记录,然后我做一个简单的比较,检查记录是否匹配特定模块和响应,然后使用计数并显示统计信息.不幸的是,当数据库中的任何记录超过1000条时,它会非常慢.
在nHibernate中,我启用了Lazy加载,这在初始查询时间有所帮助,但是当它到达这个部分时,它必须深入研究它会减慢很多.我想问题是它从很多不同的表中提取数据来获取这些统计数据. 从一些研究来看,似乎我应该能够通过编写linq语句而不是使用foreach循环来加快速度,但是我已经进行了几次尝试而且我没有达到很远.我想知道是否有人可以帮我指出正确的方向.或者对一本好的Linq教程或书籍,因为我对这个主题知之甚少 另外我看到在类似的情况下,人们建议将一个作业放入sql server来填充另一个用于查找的表,但我想尽可能避免这种情况. 这是代码. int modules = 0; var sessionsWithPullHits = from session in m_sessions where session.PullHits.Count > 0 select session; foreach (ISession<PullHitRecord,PushHitRecord> session in sessionsWithPullHits) { foreach (var pullHit in session.PullHits) if ((pullHit.Module == _Module) && (pullHit.Response == _response)) { modules++; } } 非常感谢有人给予的任何帮助. 解决方法
LINQ:
var modules = (from session in m_sessions from pullHit in session.PullHits where pullHit.Module == _Module && pullHit.Response == _response select pullHit).Count(); 注意,我不确定这将如何转换为SQL,但它是一个LINQ语句,所以应该工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |