List.Select().ToList 五万条数据用了近半小时的,请问有没高效点的方法

lrxin 2013-06-26 12:01:17


var sendlist = emailList.Select(email => new MailMessage {
MailServer = SMTPServer,
UserName = Sender,
PassWord = EmailPassword,
ServerCode = ServerCode,

ToAddr = email.Email,
BCC = string.Empty,
CC = string.Empty,

Title =Tittle,
Body = Content,
BodyText = Description,
}).ToList();

emailList里有近五万条数据,这样子执行用了近半小时,请问有没有高效点的方法?
...全文
980 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
lrxin 2013-06-28
  • 打赏
  • 举报
回复
结果发现了,是全局变量的问题。已经解决问题。谢谢各位 http://blog.csdn.net/lrxin/article/details/9196525
showjim 2013-06-27
  • 打赏
  • 举报
回复
奇葩,500ms差不多
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
你可以看看这篇文章的改进方法http://www.cnblogs.com/blusehuang/archive/2007/07/09/811075.html
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
可能时间主要在Lambda表达式上
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
不至于哦。半个小时, var sendlist = (from e in emailList select new MailMessage { MailServer = SMTPServer, UserName = Sender, PassWord = EmailPassword, ServerCode = ServerCode, ToAddr = email.Email, BCC = string.Empty, CC = string.Empty, Title =Tittle, Body = Content, BodyText = Description, }).ToList();
lrxin 2013-06-26
  • 打赏
  • 举报
回复
引用 22 楼 fate1987 的回复:
你这不是数据有奇怪的,我10W条数据.toList()也不过1,2秒,你查询很快的话,我觉得很可能是数据上的问题,很少听说Tolist()会这样的,你检查下进程和其他资源。。
能否教下检查进程和资源的方法
火拼阿三 2013-06-26
  • 打赏
  • 举报
回复
你这不是数据有奇怪的,我10W条数据.toList()也不过1,2秒,你查询很快的话,我觉得很可能是数据上的问题,很少听说Tolist()会这样的,你检查下进程和其他资源。。
newxdlysk 2013-06-26
  • 打赏
  • 举报
回复
引用 20 楼 lrxin 的回复:
[quote=引用 19 楼 Chinajiyong 的回复:] [quote=引用 18 楼 Chinajiyong 的回复:] [quote=引用 17 楼 lrxin 的回复:] 的确,不加ToList()是很快。 但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1> 这样 ILIist<MailMessage> t1=null; foreach(T t in emailList) { t1=new ILIist<T1>(); t1.MailServer = SMTPServer; //... }[/quote] 反正就是不要在查询数据库时ToList(),先加载到内存 然后再做处理[/quote] emailList已经是从数据库里读取完毕且并断开数据库。 我试发for 和 foreach 所用的时间依然非常的长,都半小时左右。CPU的占用率依然80%以上[/quote] emailList已经ToList()过了,那数据就在内存了,再慢也不至于半个小时吧。 即使查询数据库,我这9w条数据也就一两秒的事啊
lrxin 2013-06-26
  • 打赏
  • 举报
回复
引用 19 楼 Chinajiyong 的回复:
[quote=引用 18 楼 Chinajiyong 的回复:] [quote=引用 17 楼 lrxin 的回复:] 的确,不加ToList()是很快。 但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1> 这样 ILIist<MailMessage> t1=null; foreach(T t in emailList) { t1=new ILIist<T1>(); t1.MailServer = SMTPServer; //... }[/quote] 反正就是不要在查询数据库时ToList(),先加载到内存 然后再做处理[/quote] emailList已经是从数据库里读取完毕且并断开数据库。 我试发for 和 foreach 所用的时间依然非常的长,都半小时左右。CPU的占用率依然80%以上
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
引用 18 楼 Chinajiyong 的回复:
[quote=引用 17 楼 lrxin 的回复:] 的确,不加ToList()是很快。 但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1> 这样 ILIist<MailMessage> t1=null; foreach(T t in emailList) { t1=new ILIist<T1>(); t1.MailServer = SMTPServer; //... }[/quote] 反正就是不要在查询数据库时ToList(),先加载到内存 然后再做处理
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
引用 17 楼 lrxin 的回复:
的确,不加ToList()是很快。 但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1> 这样 ILIist<MailMessage> t1=null; foreach(T t in emailList) { t1=new ILIist<T1>(); t1.MailServer = SMTPServer; //... }
lrxin 2013-06-26
  • 打赏
  • 举报
回复
的确,不加ToList()是很快。 但下面已经没有逻辑了,不得不转换。
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
引用 14 楼 lrxin 的回复:
快半小时了,还没有好,CPU占用率也高,80%左右。各位有什么好的方法不
试试4L的办法,先不要ToList() 在需要的时候在处理
moonwrite 2013-06-26
  • 打赏
  • 举报
回复
分成2步 在查数据库的时候就离开ToList 目的就是把需要的数据加载到内存 //分析这个要多久~ 然后在select需要的字段
lrxin 2013-06-26
  • 打赏
  • 举报
回复
引用 11 楼 Chinajiyong 的回复:
[quote=引用 10 楼 q107770540 的回复:] [quote=引用 6 楼 Chinajiyong 的回复:] [quote=引用 4 楼 q107770540 的回复:] 去掉 .ToList() 返回IQuerable<T> 你这种写法破坏了LINQ的延迟查询特性
督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上[/quote] 从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上[/quote] 五万条数据也不至于要半小时把[/quote] 真的需要近半小时,就用版主的方法
var sendlist = (from e in emailList
             select new MailMessage
              {
                                                    MailServer = SMTPServer,
                                                    UserName = Sender,
                                                    PassWord = EmailPassword,
                                                    ServerCode = ServerCode,
                                                    ToAddr = email.Email,
                                                    BCC = string.Empty,
                                                    CC = string.Empty,
                                                    Title =Tittle,
                                                    Body = Content,
                                                    BodyText = Description,
                                                }).ToList(); 
快半小时了,还没有好,CPU占用率也高,80%左右。各位有什么好的方法不
lrxin 2013-06-26
  • 打赏
  • 举报
回复
从头看到尾,还是不明白。 emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1> 我用for foreach 都还是占用很多的时间
lanlicen 2013-06-26
  • 打赏
  • 举报
回复
不会这么慢哦 查询的时候先匹配索引字段,然后再非索引字段啊
EnForGrass 2013-06-26
  • 打赏
  • 举报
回复
引用 10 楼 q107770540 的回复:
[quote=引用 6 楼 Chinajiyong 的回复:] [quote=引用 4 楼 q107770540 的回复:] 去掉 .ToList() 返回IQuerable<T> 你这种写法破坏了LINQ的延迟查询特性
督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上[/quote] 从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上[/quote] 五万条数据也不至于要半小时把
q107770540 2013-06-26
  • 打赏
  • 举报
回复
引用 6 楼 Chinajiyong 的回复:
[quote=引用 4 楼 q107770540 的回复:] 去掉 .ToList() 返回IQuerable<T> 你这种写法破坏了LINQ的延迟查询特性
督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上[/quote] 从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上
alan817 2013-06-26
  • 打赏
  • 举报
回复
光是 emailList.Select 估计不会到半个小时吧,可能是在读取填充emailList这个列表的时候耗时,是从数据库读取出来的吗?
加载更多回复(5)

8,494

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧