我正在使用C#控制台APP发送个性化批量电子邮件,但我发现了瓶颈,如果我使用顺序编程,我每秒只能发送1封电子邮件。我试图创建一个多线程的应用程序,但我每秒只能发送两封电子邮件。
我怎样才能做得更好?
这是代码的一个片段:
public static void MainProgram(列出电子邮件,字符串cuerpo_email_en,字符串cuerpo_email_es) {
//emails list is populated with 50.000 emails
DateTime timeControllerForSendingEmails = DateTime.Now;
while (emails.Count > 0)
{
if ((DateTime.Now - timeControllerForSendingEmails).TotalSeconds >= 1)
{
timeControllerForSendingEmails = DateTime.Now;
//this method gets a list of 60 emails and remove them from the main list
List<EmailEnt> queuedEmails = GetEmailsQueue(emails, 60));
Send(queuedEmails);
}
}
}
public void Send(List<EmailEnt> queuedEmails)
{
IList<Task> tasks = new List<Task>();
List<string> logLines = new List<string>();
foreach (EmailEnt emailEnt in queuedEmails)
{
string subject = "Hello {name}";
string body = "im the body;
tasks.Add(Task.Factory.StartNew(() =>
{
SendEmail(emailEnt, subject, body);
}));
}
Task.WaitAll(tasks.ToArray());
}
答案 0 :(得分:0)
你还有机会以“沙盒模式”运行吗?根据AWS:
当您在沙箱中时,您的发送配额为每封200条消息 24小时和您的最大发送速率是每条消息一条 第二。要增加发送限制,您需要申请 生产访问。有关更多信息,请参阅请求生产 访问Amazon SES。请求生产访问并启动后 发送电子邮件,您可以进一步增加发送限制 遵循增加您的Amazon SES发送中的指导 限制部分。
如果没有,我使用与此类似的代码发送第二封电子邮件(不在SES上),并且工作正常:
Parallel.ForEach(mailQueue, new ParallelOptions() {MaxDegreeOfParallelism = 7}, itm=>SendEmail(itm));
这或许在功能上与您正在做的事情相同,但我可以肯定地说它确实提供了更高的吞吐量,可能值得一试。