读书人

List.Select().ToList 五万条数据用了

发布时间: 2013-07-04 11:45:33 作者: rapoo

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()
[解决办法]
引用:
去掉 .ToList()
返回IQuerable<T>

你这种写法破坏了LINQ的延迟查询特性

督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在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这个列表的时候耗时,是从数据库读取出来的吗?
[解决办法]

引用:
Quote: 引用:

去掉 .ToList()
返回IQuerable<T>

你这种写法破坏了LINQ的延迟查询特性

督察,即使破坏延迟性查询,五万条数据会这么慢?我觉得应该在Lambda表达式上

从他的代码来看,只进行了一次数据库连接查询 问题不在lamda表达的上
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

去掉 .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;
//...

}
[解决办法]
引用:
Quote: 引用:

的确,不加ToList()是很快。
但下面已经没有逻辑了,不得不转换。

emailList也是一个ILIST<T>,主要目的是转成一个新的ILIST<T1>
这样


ILIist<MailMessage> t1=null;
foreach(T t in emailList)
{
t1=new ILIist<T1>();
t1.MailServer = SMTPServer;
//...

}


反正就是不要在查询数据库时ToList(),先加载到内存
然后再做处理
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

的确,不加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差不多

读书人网 >.NET

热点推荐