У меня есть служба .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()
при высокой скорости отправки электронной почты? Какие есть варианты оптимизации производительности?