имейл от asp.net c# програма много бавна

Изпращам обикновено имейл съобщение от уеб страница на asp.net до двама получатели. Завършването на изпълнението отнема около 15 секунди. Възможно ли е да се ускори това? Това е кодът:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;

namespace NihulKriotNS.BLL
{
public class EMailClass
{
    //fields
    private const string strFrom = "myEmail";
    private const string mailServer = "myServer";
    private const string userName = "myUserName";
    private const string usePass = "myPassword";
    //ctors
    public EMailClass()
    {
    }

    public void SendEMail(List<string> emailList, string strSubject, string  strMessage, bool isHTML)
              {
        MailMessage msg = new MailMessage();
        msg.From = new MailAddress(strFrom);
        if (emailList != null && emailList.Count > 0 )
            foreach (string em in emailList)
            {
                msg.To.Add(em);
            }
        else
            return;
        msg.Subject = strSubject;
        msg.Body = strMessage;
        msg.IsBodyHtml = isHTML;
        SmtpClient smtp = new SmtpClient(mailServer);
        smtp.Credentials = new System.Net.NetworkCredential(userName, usePass);


        smtp.Send(msg);
        msg.Dispose();
    }
}

}

Опитах да използвам smpt.SendAsync, но изобщо не помогна. Не съм много сигурен как да го използвам правилно. Благодаря ти много.


person Dov Miller    schedule 31.07.2011    source източник
comment
Предполагам, че е нещо с мрежовото повикване към smtp сървъра. Използвате ли име на хост, чието търсене отнема известно време? Какво се случва, ако използвате IP адрес?   -  person skaz    schedule 31.07.2011
comment
възможен дубликат на ASP.NET бавно изпращане на имейл   -  person leppie    schedule 01.08.2011


Отговори (1)


По-рано получих отговор от Самир Адел (и потвърден в коментар от някой друг, не помня кой), за да използвам няколко нишки. По някаква причина, за съжаление, този отговор е изтрит. Не бях запознат с темата за резбите. Потърсих темата в книгата Pro C# 2008 and the .NET 3.5 Platform от Andrew Troelsen. Измислих следния код:

Thread backgroundThread = new Thread(new ThreadStart(EMailPrepareAndSend));
backgroundThread.Name = "Secondary";
backgroundThread.Start();

Където EMailPrepareAndSend е метод, при който се подготвя имейл съобщението и от който се извиква методът SendEmail() в класа EMail, показан в моя въпрос. Това позволи на програмата да продължи незабавно, дори ако имейлът не е приключил с изпращането си. Благодаря на Самир Адел, отговорът му ме насочи в правилната посока.

person Dov Miller    schedule 01.08.2011
comment
Добре дошъл, Дов Милър, аз също съм изненадан защо отговорът ми беше изтрит, но съм толкова щастлив, че отговорът ми ти помогна да разрешиш проблема си. - person Samir Adel; 01.08.2011
comment
някой на име Робърт Харви изтри отговора ми, без дори да уточни защо?! - person Samir Adel; 01.08.2011
comment
Не съм запознат с вградените Async методи, ако можете да ми дадете пример, ще се радвам да го използвам. Благодаря ти. - person Dov Miller; 01.08.2011
comment
@Samir_Adel: Робърт Харви е един от модераторите. Ако той е изтрил отговора ви, това вероятно е, защото е бил маркиран от някой или като ниско качество, или като не отговор. Нямам достатъчно представител, за да видя отговора ви, така че не мога да предложа причина, но можете да попитате в meta, ако искате повече подробности. По принцип отговорите, които са трудни за четене/разбиране или се състоят само от връзки, е най-вероятно да бъдат изтрити. - person forsvarir; 01.08.2011