List.Select().ToList 五万条数据用了近半小时的,请问有没高效点的方法
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里有近五万条数据,这样子执行用了近半小时,请问有没有高效点的方法?
List Select ToList() 效率低 高效
[解决办法]
可能时间主要在Lambda表达式上
[解决办法]
你可以看看这篇文章的改进方法http://www.cnblogs.com/blusehuang/archive/2007/07/09/811075.html
[解决办法]
去掉 .ToList()
返回IQuerable<T>
你这种写法破坏了LINQ的延迟查询特性
[解决办法]
你可以用异步编程模型AsParallel()
[解决办法]
督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上
[解决办法]
ToList 已经从库里执行查询,取得数据了,如果还有其他逻辑,不要ToList
[解决办法]
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();
你的 select new{}里边只用到了email.Email这一个字段,其他都是常量?
[解决办法]
光是 emailList.Select 估计不会到半个小时吧,可能是在读取填充emailList这个列表的时候耗时,是从数据库读取出来的吗?
[解决办法]
从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上
[解决办法]
去掉 .ToList()
返回IQuerable<T>
你这种写法破坏了LINQ的延迟查询特性
督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上
从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上
五万条数据也不至于要半小时把
[解决办法]
不会这么慢哦
查询的时候先匹配索引字段,然后再非索引字段啊
[解决办法]
分成2步
在查数据库的时候就离开ToList 目的就是把需要的数据加载到内存
//分析这个要多久~
然后在select需要的字段
[解决办法]
快半小时了,还没有好,CPU占用率也高,80%左右。各位有什么好的方法不
试试4L的办法,先不要ToList()
在需要的时候在处理
[解决办法]
的确,不加ToList()是很快。
但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1>
这样
ILIist<MailMessage> t1=null;
foreach(T t in emailList)
{
t1=new ILIist<T1>();
t1.MailServer = SMTPServer;
//...
}
[解决办法]
的确,不加ToList()是很快。
但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1>
这样
ILIist<MailMessage> t1=null;
foreach(T t in emailList)
{
t1=new ILIist<T1>();
t1.MailServer = SMTPServer;
//...
}
反正就是不要在查询数据库时ToList(),先加载到内存
然后再做处理
[解决办法]
的确,不加ToList()是很快。
但下面已经没有逻辑了,不得不转换。
emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1>
这样
ILIist<MailMessage> t1=null;
foreach(T t in emailList)
{
t1=new ILIist<T1>();
t1.MailServer = SMTPServer;
//...
}
反正就是不要在查询数据库时ToList(),先加载到内存
然后再做处理
emailList已经是从数据库里读取完毕且并断开数据库。
我试发for 和 foreach 所用的时间依然非常的长,都半小时左右。CPU的占用率依然80%以上
emailList已经ToList()过了,那数据就在内存了,再慢也不至于半个小时吧。
即使查询数据库,我这9w条数据也就一两秒的事啊
[解决办法]
你这不是数据有奇怪的,我10W条数据.toList()也不过1,2秒,你查询很快的话,我觉得很可能是数据上的问题,很少听说Tolist()会这样的,你检查下进程和其他资源。。
[解决办法]
奇葩,500ms差不多