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