C#SmtpClient.Send()因密件抄送而变慢

C#SmtpClient.Send()因密件抄送而变慢,c#,performance,smtpclient,bcc,C#,Performance,Smtpclient,Bcc,我使用“System.Net.Mail”在我们的内联网系统上用C语言发送电子邮件# Send()方法非常慢,我不明白为什么 调试后,我删除了BCC调用:(MM是MailMessage()和Item,一个字符串电子邮件地址): 在我评论这句话之前,一封电子邮件大约需要30或40秒。现在,大约2秒。为什么? 对此有什么解释吗?我可以添加“To”和“CC”,而不会出现性能问题。但不是“密件抄送”。我也有类似的问题,这让我疯狂地试图找出是什么让一些电子邮件变慢,而另一些邮件变快 创建SmtpClient

我使用“System.Net.Mail”在我们的内联网系统上用C语言发送电子邮件#

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

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

在我评论这句话之前,一封电子邮件大约需要30或40秒。现在,大约2秒。为什么?


对此有什么解释吗?我可以添加“To”和“CC”,而不会出现性能问题。但不是“密件抄送”。

我也有类似的问题,这让我疯狂地试图找出是什么让一些电子邮件变慢,而另一些邮件变快

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

但是,添加与To地址重复的CC将始终额外增加5秒。添加两次重复CC将增加10秒

我没有检查,但我假设如果“收件人”或“密件抄送”列表中有重复项,则情况也是如此

以下是删除重复项的代码:

// 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);
    }
}
//检查并删除重复项
对于(int x=0;xx;y--)
{
if(message.To[y]。地址==message.To[x]。地址)
message.To.RemoveAt(y);
}
对于(int y=message.CC.Count-1;y>=0;y--)
{
if(message.CC[y].Address==message.To[x].Address)
message.CC.RemoveAt(y);
}
对于(int y=message.Bcc.Count-1;y>=0;y--)
{
if(message.Bcc[y].Address==message.To[x].Address)
message.Bcc.RemoveAt(y);
}
}
对于(int x=0;xx;y--)
{
if(message.CC[y].Address==message.CC[x].Address)
message.CC.RemoveAt(y);
}
对于(int y=message.Bcc.Count-1;y>=0;y--)
{
if(message.Bcc[y].Address==message.CC[x].Address)
message.Bcc.RemoveAt(y);
}
}
对于(int x=0;xx;y--)
{
if(message.Bcc[y]。地址==message.Bcc[x]。地址)
message.Bcc.RemoveAt(y);
}
}

延迟是发生在发送上还是发生在密件抄送.Add上?您确定是.NET而不是您的邮件服务器吗?您要添加多少密件抄送?您要发送到多少密件抄送地址?每一个都是一个单独的发送…CodeCaster有直觉-这可能是你的邮件服务器没有很好地处理密件抄送,特别是如果列表很大的话。看看这个,非常感谢。我们遇到了这个。非常奇怪的行为。我想这是一个bug。
// 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);
    }
}