0
從新線程中聲明的局部變量的用法有任何區別嗎?線程中的外部變量用法
string emailSubject = "New message notification";
string imagePath = somePath;
string conversationName = entity.Name;
new Thread(delegate()
{
foreach (var user in participantList)
{
string newEmailBody = emailBody.Replace("###ImagePath###", imagePath)
.Replace("###UserName###", user.Name)
.Replace("###ConversationName###", conversationName);
MailUtil.SendEmail(user.Email, emailSubject, newEmailBody);
}
}).Start();
在新線程中聲明它們更安全嗎?就像這樣:
new Thread(delegate()
{
string emailSubject = "New message notification";
string imagePath = somePath;
string conversationName = entity.Name;
foreach (var user in participantList)
{
string newEmailBody = emailBody.Replace("###ImagePath###", imagePath)
.Replace("###UserName###", user.Name)
.Replace("###ConversationName###", conversationName);
MailUtil.SendEmail(user.Email, emailSubject, newEmailBody);
}
}).Start();
垃圾回收器呢?對於第一個變體,GC會「知道」這些變量仍在使用中嗎? – Pal
@Pal是的。 GC足夠聰明,可以跟蹤這些變量。在第一種情況下,應用所謂的「封閉」程序。一般來說,你不應該對GC感到擔心,但瞭解GC的算法可以幫助你更好地設計你的應用程序。 –