2014-01-28 30 views
0

我正在使用Windows服務從一個隊列(SQL Server表)中提取一批物品(電子郵件)並同時發送這些項目。最大限度地提高同時發送電子郵件的吞吐量

由於我使用.NET 4.5,我實現了所有與async/await的方法。我開始的批處理大小爲10.邏輯從db中獲取記錄,在再次敲擊db之前創建10 Task,然後是Task.WhenAll()。發送100封電子郵件需要大約89秒的時間。

然後我嘗試了100/100任務的批量大小。

由於發送電子郵件是異步操作,因此我預計吞吐量會有大幅度增加,但同一100封電子郵件大約需要79秒。不是很大的改進。

瓶頸在哪裏? ThreadPool上的線程可能不夠用?也許SMTP服務器(亞馬遜SES)限制併發連接?

+0

我認爲亞馬遜應該支持批量短信發送,反正你嘗試使用亞馬遜隊列服務(http://aws.amazon.com/ en/sqs /) –

+0

其實這個問題並不是隊列實現,而是儘可能快地發送郵件 – oscarmorasu

+0

我想嘗試一些簡單的日誌記錄到控制檯或者其他的東西來計算你的任務。 –

回答

2

我找到了解決方案here

這是增加最大併發連接數的問題。我已將此添加到App.config中和所有的10個連接同時發生:

<system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="10" /> 
    </connectionManagement> 
</system.net> 
相關問題