由于 BCC,C# SmtpClient.Send() 很慢
C# SmtpClient.Send() is slow because of BCC
我正在使用 "System.Net.Mail" 在我们的 C# 内联网系统上发送电子邮件
Send() 方法非常慢,我不明白为什么。
调试后,我删除了 BCC 调用:(MM 是一个 MailMessage() 和 Item,一个字符串电子邮件地址):
MM.Bcc.Add(new MailAddress(Item));
在我评论这一行之前,一封电子邮件大约需要 30 或 40 秒。现在,大约是 2 秒。为什么?
这个有说明吗?我可以添加 "To" 和 "CC" 而没有性能问题。但不是 "BCC".
我遇到了类似的问题,这让我发疯了,试图找出是什么让一些电子邮件变慢而另一些变快。
创建 SmtpClient 后发送的第一封电子邮件需要 5 秒。之后,重复使用相同的 SmtpClient,如果在上一个的 60 秒内完成,大约需要 0.4 秒。之后我认为它释放了它与池的连接。
但是,添加与收件人地址重复的抄送总是会额外增加 5 秒。添加重复的 CC 两次将增加 10 秒。
我没有检查,但我假设如果 "TO" 或 "BCC" 列表中有重复项,情况也是如此。
这是删除重复项的代码:
// check and remove duplicates
for (int x = 0; x < message.To.Count; x++)
{
for (int y = message.To.Count - 1; y > x; y--)
{
if (message.To[y].Address == message.To[x].Address)
message.To.RemoveAt(y);
}
for (int y = message.CC.Count - 1; y >= 0; y--)
{
if (message.CC[y].Address == message.To[x].Address)
message.CC.RemoveAt(y);
}
for (int y = message.Bcc.Count - 1; y >= 0; y--)
{
if (message.Bcc[y].Address == message.To[x].Address)
message.Bcc.RemoveAt(y);
}
}
for (int x = 0; x < message.CC.Count; x++)
{
for (int y = message.CC.Count - 1; y > x; y--)
{
if (message.CC[y].Address == message.CC[x].Address)
message.CC.RemoveAt(y);
}
for (int y = message.Bcc.Count - 1; y >= 0; y--)
{
if (message.Bcc[y].Address == message.CC[x].Address)
message.Bcc.RemoveAt(y);
}
}
for (int x = 0; x < message.Bcc.Count; x++)
{
for (int y = message.Bcc.Count - 1; y > x; y--)
{
if (message.Bcc[y].Address == message.Bcc[x].Address)
message.Bcc.RemoveAt(y);
}
}
我正在使用 "System.Net.Mail" 在我们的 C# 内联网系统上发送电子邮件
Send() 方法非常慢,我不明白为什么。
调试后,我删除了 BCC 调用:(MM 是一个 MailMessage() 和 Item,一个字符串电子邮件地址):
MM.Bcc.Add(new MailAddress(Item));
在我评论这一行之前,一封电子邮件大约需要 30 或 40 秒。现在,大约是 2 秒。为什么?
这个有说明吗?我可以添加 "To" 和 "CC" 而没有性能问题。但不是 "BCC".
我遇到了类似的问题,这让我发疯了,试图找出是什么让一些电子邮件变慢而另一些变快。
创建 SmtpClient 后发送的第一封电子邮件需要 5 秒。之后,重复使用相同的 SmtpClient,如果在上一个的 60 秒内完成,大约需要 0.4 秒。之后我认为它释放了它与池的连接。
但是,添加与收件人地址重复的抄送总是会额外增加 5 秒。添加重复的 CC 两次将增加 10 秒。
我没有检查,但我假设如果 "TO" 或 "BCC" 列表中有重复项,情况也是如此。
这是删除重复项的代码:
// check and remove duplicates
for (int x = 0; x < message.To.Count; x++)
{
for (int y = message.To.Count - 1; y > x; y--)
{
if (message.To[y].Address == message.To[x].Address)
message.To.RemoveAt(y);
}
for (int y = message.CC.Count - 1; y >= 0; y--)
{
if (message.CC[y].Address == message.To[x].Address)
message.CC.RemoveAt(y);
}
for (int y = message.Bcc.Count - 1; y >= 0; y--)
{
if (message.Bcc[y].Address == message.To[x].Address)
message.Bcc.RemoveAt(y);
}
}
for (int x = 0; x < message.CC.Count; x++)
{
for (int y = message.CC.Count - 1; y > x; y--)
{
if (message.CC[y].Address == message.CC[x].Address)
message.CC.RemoveAt(y);
}
for (int y = message.Bcc.Count - 1; y >= 0; y--)
{
if (message.Bcc[y].Address == message.CC[x].Address)
message.Bcc.RemoveAt(y);
}
}
for (int x = 0; x < message.Bcc.Count; x++)
{
for (int y = message.Bcc.Count - 1; y > x; y--)
{
if (message.Bcc[y].Address == message.Bcc[x].Address)
message.Bcc.RemoveAt(y);
}
}