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();
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这个列表的时候耗时,是从数据库读取出来的吗?
[解决办法]
去掉 .ToList()
返回IQuerable<T>
你这种写法破坏了LINQ的延迟查询特性
督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上
从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上
快半小时了,还没有好,CPU占用率也高,80%左右。各位有什么好的方法不
的确,不加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(),先加载到内存
然后再做处理
emailList已经是从数据库里读取完毕且并断开数据库。
我试发for 和 foreach 所用的时间依然非常的长,都半小时左右。CPU的占用率依然80%以上