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
