由于BCC,C#SmtpClient.Send()很慢

时间:2015-09-23 08:25:11

标签: c# performance smtpclient bcc

我正在使用" System.Net.Mail"用于在C#

的Intranet系统上发送电子邮件

Send()方法非常慢,我不明白为什么。

调试后,我删除了BCC调用:(MM是MailMessage()和Item,字符串电子邮件地址):

MM.Bcc.Add(new MailAddress(Item));

在我评论此行之前,电子邮件大约需要30或40秒。现在,它大约2秒钟。为什么呢?

有关于此的解释吗?我可以添加" To"和" CC"没有性能问题。但不是" BCC"。

1 个答案:

答案 0 :(得分:3)

我遇到了类似的问题,这让我疯狂地想弄清楚是什么让一些电子邮件变得缓慢而其他电子邮件很快。

创建SmtpClient后发送的第一封电子邮件需要5秒钟。之后,重复使用相同的SmtpClient,如果在前一个的60秒内完成,则大约0.4秒。在那之后,我认为它释放了它与游泳池的连接。

但是,添加与To地址重复的CC将始终再添加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);
    }
}