加快在c#.net中发送大批电子邮件

时间:2009-09-11 15:44:53

标签: .net asp.net multithreading c#-3.0

我们向大约10k客户发送电子邮件,现在这个过程大约需要45分钟左右。应用程序在服务器上运行,只发送整批产品。我想知道引入线程和拆分列表是否会加快这个过程。如果是这样,有多少线程是最佳的?

编辑:

实际上它是我们通常发送的一条消息,我们将所有收件人添加到密件抄送。但是,它仍然需要很长时间。我们通过光纤线路将其发送出去。

7 个答案:

答案 0 :(得分:6)

在做出任何决定之前,您必须对流程进行分析。

花费的时间在哪里(创建邮件,检索收件人,将邮件提交到SMTP,SMTP发送邮件等)?

不要猜测或假设你知道瓶颈在哪里,特别是在考虑并行方法时。你可能很容易让事情变得更糟(或没有影响)。

答案 1 :(得分:0)

这听起来像是可以轻松地重写以并行运行并利用多个内核(甚至单个内核上的线程)的东西。

但是,这可能不会带来太大的改善。您的限制因素很可能是来自smtp服务器的带宽或吞吐量,在这种情况下,任何代码更改都不会对您有所帮助。在你做任何其他事情之前,你需要停下来并确保你的c#代码确实在慢的地方。

答案 2 :(得分:0)

取决于您的SMTP服务器和网络设置设置以及您的代码。您的瓶颈可能是与SMTP服务器的通信 - 是否可以在同一台计算机上运行电子邮件发送代码和SMTP服务器?

答案 3 :(得分:0)

首先发布个人资料,看看你是否可以减少当前所用的0.27秒/电子邮件。

我的第一反应是你应该将数据拆分并将其分配给N个不同的服务器。

答案 4 :(得分:0)

一些想法:

如果您发送的消息对所有客户端都相同,请使用BCC发送一条消息。 SMTP服务器可能会比10k消息更好地处理单个消息。

如果您的公司有多个SMTP服务器用于备份/负载平衡,请考虑在多个SMTP服务器之间拆分请求。

答案 5 :(得分:0)

这取决于你的smtp服务器,但我在其中一个项目中使用的服务器有限制。例如,如果您尝试在不到1秒的时间内发送5封电子邮件,则会将其标记为垃圾邮件。

所以我在发送2封邮件后使用了System.Threading.Thread.Sleep

并且不要忘记增加Server.ScriptTimeout,因为它可能比所有邮件的默认值花费更多时间。

答案 6 :(得分:0)

实施一些您自己的SMTP服务器逻辑。如果将消息同时发送到多个主机,您可能可以将其加速到10-100次。它看起来现在所有的瓶颈都在你的SMTP服务器上,每秒不能发送超过3封电子邮件。真正的限制要高得多。或者您可以更改当前的SMTP服务器以获得更好的服务器。或微调存在。您确定它未配置为允许不超过3个并发发送吗?