最大化同时发送电子邮件的吞吐量

时间:2014-01-28 04:18:17

标签: .net async-await

我正在开发一个Windows服务,它从队列(SQL Server表)中获取一批项目(电子邮件)并同时发送这些项目。

由于我使用的是.NET 4.5,因此我使用async/await实现了所有方法。我从批量大小10开始。逻辑从数据库中提取记录,在再次访问数据库之前创建10 Task后跟Task.WhenAll()。发送100封电子邮件大约需要89秒。

然后我尝试了批量大小为100/100的任务。

我期待吞吐量大幅增加,因为发送电子邮件是异步操作,但同样的100封电子邮件需要大约79秒。没有太大的改进。

瓶颈在哪里? ThreadPool上的线程可能不够?也许SMTP服务器(Amazon SES)会限制并发连接?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案here

这是增加最大并发连接数的问题。我将此添加到App.config中,并且所有10个连接同时发生:

<system.net>
    <connectionManagement>
        <add address="*" maxconnection="10" />
    </connectionManagement>
</system.net>