【发布时间】:2017-03-01 20:46:54
【问题描述】:
我下面的代码表现很差。我使用 .Net StopWatch 类找出导致缓慢的代码。 这条线似乎是问题所在:
message.SendAndSaveCopy();
E.G 批 20 封电子邮件:发送第一封电子邮件大约需要 2 秒,这个时间逐渐增加,直到第 20 封电子邮件,最多需要 18 秒。
public int SendBulkMarketing(bool CheckDelivery)
{
int iCounter = 0;
DataTable dt = null;
try
{
DeliveryReportDAL myDeliveryReportDAL = new DeliveryReportDAL();
dt = myDeliveryReportDAL.GetListMessageToSend('E');
if (dt == null) return iCounter;
iCounter = dt.Rows.Count;
}
catch (Exception ex)
{
new Util().LogError(ex, "SMTP:: SendBulkMarketing 1st catch");
return 0;
}
if (iCounter > 0)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
service.Credentials = new WebCredentials(Account_UserName, Account_Password, Account_Domain);
service.Url = new Uri(Service_URL);
for (int I = 0; I < iCounter; ++I)
{
try
{
string myGUID = "{" + dt.Rows[I]["GUID"].ToString() + "}";
if (IsValidEmailAddress(dt.Rows[I]["OwnerEmail"].ToString()) == false)
{
DeliveryReportDAL myReport = new DeliveryReportDAL();
myReport.SaveSentStatus(myGUID, 'G', 3);
continue;
}
EmailMessage message = new EmailMessage(service);
message.Subject = dt.Rows[I]["TemplateSubject"].ToString();
message.Body = dt.Rows[I]["TemplateText"].ToString().Replace("\0", " ");
message.ToRecipients.Add(dt.Rows[I]["OwnerEmail"].ToString());
message.IsDeliveryReceiptRequested = true;
Guid myPropertySetId = new Guid(myGUID);
ExtendedPropertyDefinition myExtendedPropertyDefinition = new ExtendedPropertyDefinition(myPropertySetId, "blablabla", MapiPropertyType.String);
ServicePointManager.ServerCertificateValidationCallback =
delegate(object sender1,
System.Security.Cryptography.X509Certificates.X509Certificate certificate,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{ return true; };
message.SendAndSaveCopy();
DeliveryReportDAL myReport1 = new DeliveryReportDAL();
myReport1.SaveSentStatus(dt.Rows[I]["GUID"].ToString(), 'G', 1);
}
catch (Exception ex)
{
new Util().LogError(ex, "SMTP:: SendBulkMarketing 2nd catch");
}
}
}
return iCounter;
}
如果能帮助我提高代码的性能,我将不胜感激。
【问题讨论】:
-
我不知道确切的问题,但以下链接可能对您进行更多调试有所帮助如果您的发现,请告诉我们。
-
@SivakrishnaDonepudi 感谢您的帮助。但是,我已经使用了日志记录/跟踪功能,但它没有为我提供任何答案,而且我也完全了解最佳实践。我认为这个问题可能是由于 Exchange 服务器上的限制策略,特别是 MessageRateLimit 策略。我目前正在对此进行调查。
标签: c# exchangewebservices ews-managed-api