關於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<T>,有五萬條記錄,結果上面的代碼運行居然要用到半小時才完成。經多次調試,的確是時間主要在Lambda表達式上。因為SMTPServer是一個全局變量,並非局總變量,每一行都要重新去獲取。

只是一個全局變量就這么慢,那么如果是一個函數呢。

代碼變成如下:

 

var mailServer = SMTPServer
var sendlist = emailList.Select(email => new MailMessage {
                                                    MailServer = mailServer,
                                                    UserName = Sender,
                                                    PassWord = EmailPassword,
                                                    ServerCode = ServerCode,
 
                                                    ToAddr = email.Email,
                                                    BCC = string.Empty,
                                                    CC = string.Empty,
 
                                                    Title =Tittle,
                                                    Body = ToContent(Content),
                                                    BodyText = Description,
                                                }).ToList();

 

 

結過測試,也當出現同樣的情況。

為此,在寫類似的代碼時,不要出現全局變量函數

如果非要用到呢?

全局變量的解決方法:把全局變量的值賦給一個局部變量就行了。

如:

 

var mailServer = SMTPServer
var sendlist = emailList.Select(email => new MailMessage {
                                                    MailServer = mailServer,
                                                    UserName = Sender,
                                                    PassWord = EmailPassword,
                                                    ServerCode = ServerCode,
 
                                                    ToAddr = email.Email,
                                                    BCC = string.Empty,
                                                    CC = string.Empty,
 
                                                    Title =Tittle,
                                                    Body = Content,
                                                    BodyText = Description,
                                                }).ToList();

函數的方法,暫時沒有想到別的方法,只能在修改業務了。

 


貼子鏈接http://bbs.csdn.net/topics/390500602

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM