http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 8121|回复: 1

[学习心得] C#实际编程中尽量不要在foreach中去访问数据库

[复制链接]
发表于 2016-5-13 09:07:38 | 显示全部楼层 |阅读模式
有时在编程中经常会用到提取数据时需要从两张表中去提取,当然这样是可以用sql的链接来处理的,如果不用表连接的话,可能一些人会用下面的方法来处理。
例如表A :id,Bid,context,表B:id,name,我们在从A中提取一定量的数据后,在程序里进行处理,看下面代码:
[C#] 纯文本查看 复制代码
var list=A_bll.GetList(5000);
foreach(var model in list)
{
var info=B_bll.FindInfo(model.Bid);
    var name=info.name;
    //一些逻辑
}


以上代码写起来确实比较方便,但是试想如果你提取的数据很多,有5000以上的话,你就需要去访问5000+次的数据库,这样势必会造成频繁的访问数据库,数据库服务器压力就会比较大。我们看下面的提取方法。
[C#] 纯文本查看 复制代码
var list=A_bll.GetList(5000);
var Blist=B_bll.GetListByBids(list.select(l=>l.Bids));//根据bids一次性从数据库取出所有需要查询的数据
foreach(var model in list)
{
var info=Blist.FirstOrDefault(b=>b.id==model.Bid);
var name=info.name;
//一些逻辑
}


上面的代码就比较简单了,只需访问一次数据库,然后在内存中去处理A和B的链接逻辑,一个需要访问5000+次数据库,一次只需要访问1次数据库,差别就显而易见了。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2016-5-13 09:16:36 | 显示全部楼层
我只是路过打酱油的。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-22 19:21

© 2014-2021

快速回复 返回顶部 返回列表