我正在开发一个Windows服务,它从队列(SQL Server表)中获取一批项目(电子邮件)并同时发送这些项目。
由于我使用的是.NET 4.5,因此我使用async/await
实现了所有方法。我从批量大小10开始。逻辑从数据库中提取记录,在再次访问数据库之前创建10 Task
后跟Task.WhenAll()
。发送100封电子邮件大约需要89秒。
然后我尝试了批量大小为100/100的任务。
我期待吞吐量大幅增加,因为发送电子邮件是异步操作,但同样的100封电子邮件需要大约79秒。没有太大的改进。
瓶颈在哪里? ThreadPool
上的线程可能不够?也许SMTP服务器(Amazon SES)会限制并发连接?
答案 0 :(得分:2)
我找到了解决方案here。
这是增加最大并发连接数的问题。我将此添加到App.config中,并且所有10个连接同时发生:
<system.net>
<connectionManagement>
<add address="*" maxconnection="10" />
</connectionManagement>
</system.net>