【发布时间】:2011-02-12 09:56:54
【问题描述】:
我有一个 .NET 服务,它在后台线程上处理队列,并从队列中的项目以非常高的速率发送大量小型电子邮件消息(如果这是偶数,则每秒发送 100 条消息)可能的)。目前,我使用SmtpClient.Send(),但我担心它可能会影响性能。
对Send() 的每次调用都会经历一个完整的循环,即打开套接字、执行 SMTP 会话(HELO、MAIL FROM、RCPT TO、DATA)和关闭套接字。在伪代码中:
for each message {
open socket
send HELO
send MAIL FROM
send RCPT TO
send DATA
send QUIT
close socket
}
(编辑:这个关于SmtpClient.Send() 的陈述实际上是错误的,正如我在回答中所解释的那样。)
我认为下面的伪代码会更优化:
open socket
send HELO
for each message {
send MAIL FROM
send RCPT TO
send DATA
}
send QUIT
close socket
在高速率发送电子邮件时,我应该关注SmtpClient.Send() 的性能吗?我有哪些优化性能的选择?
【问题讨论】:
-
这些邮件通常是相同的,但收件人不同,还是电子邮件的内容不同?
-
@Rob Levine:相同的收件人,但内容不同。
-
每秒数百?到底谁愿意被埋在这么多电子邮件下面?
-
任何体面的 SMTP 服务器都会让你很快慢下来。