加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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语句,所以应该工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读