C# 提交时发送邮件会减慢表单的速度

C# 提交时发送邮件会减慢表单的速度,c#,asp.net,webforms,smtpclient,C#,Asp.net,Webforms,Smtpclient,所以我有一个典型的web表单,我注意到在到达下一个屏幕之前提交表单时有很长的延迟。在玩过之后,我发现是邮件消息部分造成了延迟。我想有人看看这一点,并给我一些建议,我可以如何改进这一点,以加快我的提交 代码隐藏 protected void Submit_Click(object sender, EventArgs e) { blah blah blah... StringBuilder sb = new StringBuilder();

所以我有一个典型的web表单,我注意到在到达下一个屏幕之前提交表单时有很长的延迟。在玩过之后,我发现是邮件消息部分造成了延迟。我想有人看看这一点,并给我一些建议,我可以如何改进这一点,以加快我的提交

代码隐藏

protected void Submit_Click(object sender, EventArgs e)
    {
         blah blah blah...

        StringBuilder sb = new StringBuilder();
        sb.Append("<html><body>");
        sb.Append("Success!!");
        sb.Append("</body></html>");
        MailMessage msg = new MailMessage();
        SmtpClient server = new SmtpClient("");
        msg.To.Add(toaddress);
        msg.From = new MailAddress(fromaddress, fromname);
        msg.Subject = "New Submission";
        msg.Body = sb.ToString();
        msg.IsBodyHtml = true;
        server.Send(msg);

        messageLabel.Text = "Your submission has been sent!";
        messageLabel.Visible = true;
   }
protectedvoid提交\u单击(对象发送者,事件参数e)
{
废话废话。。。
StringBuilder sb=新的StringBuilder();
某人加上(“”);
某人追加(“成功!!”);
某人加上(“”);
MailMessage msg=新的MailMessage();
SmtpClient服务器=新的SmtpClient(“”);
msg.To.Add(toaddress);
msg.From=新邮件地址(fromaddress,fromname);
msg.Subject=“新提交”;
msg.Body=sb.ToString();
msg.IsBodyHtml=true;
发送(msg);
messageLabel.Text=“您的提交已发送!”;
messageLabel.Visible=true;
}

有什么办法可以加快速度吗?我最大的问题是人们不认为他们点击了提交,他们又点击了。我知道在他们点击Submit按钮后,我可以灰显Submit按钮,但我希望有一些以前没有意识到的速度改进。

在单独的线程上执行邮件提交,同时将结果呈现给用户。如果邮件提交失败,请将电子邮件发送到本地磁盘,以便在进程终止时查看


将对邮件发送结果的引用存储在应用程序状态或某个静态字段中,以便用户稍后可以查看邮件发送是否成功。

在单独的线程上执行邮件提交,同时将结果呈现给用户。如果邮件提交失败,请将电子邮件发送到本地磁盘,以便在进程终止时查看


将对邮件发送结果的引用存储在应用程序状态或某个静态字段中,以便用户稍后可以查看邮件发送是否成功。

在单独的线程上执行邮件提交,同时将结果呈现给用户。如果邮件提交失败,请将电子邮件发送到本地磁盘,以便在进程终止时查看


将对邮件发送结果的引用存储在应用程序状态或某个静态字段中,以便用户稍后可以查看邮件发送是否成功。

在单独的线程上执行邮件提交,同时将结果呈现给用户。如果邮件提交失败,请将电子邮件发送到本地磁盘,以便在进程终止时查看


将对消息发送结果的引用存储在应用程序状态或某个静态字段中,以便用户稍后可以查看消息发送是否成功。

我经常参与具有大规模邮件发送要求的部署。你说得对-电子邮件确实会大大降低应用程序的速度,这就是为什么我们从不直接从应用程序本身发送电子邮件

我们也很少在大型应用程序中使用多线程——只是没有足够的线程

我们始终选择两个选项中的一个,这两个选项都具有良好的扩展性:

  • 消息队列,例如MSMQ。将电子邮件发送到消息队列,然后让一个或多个“服务器”接收出站邮件。可以无限地添加服务器。企业可扩展性

  • 数据库。将电子邮件发送到数据库,然后继续。编写一个单独的应用程序或服务来接收电子邮件并进行处理。同样,它可以很好地扩展,但通常不如消息队列

  • 这两种方法还有一个非常有用的好处:事务。您可以将这两个选项包装在TransactionScope中,这意味着,如果流程中出现任何其他错误,您可以在电子邮件实际发送之前回滚

    只有100%的已提交事务最终被转换为出站电子邮件

    没有什么比向客户发送一封写着“谢谢,您的订单已发送”的电子邮件更糟糕的了,之后在处理流程中发现实际上您缺货了


    希望这能有所帮助。

    我经常参与具有大规模邮件发送需求的部署。你说得对-电子邮件确实会大大降低应用程序的速度,这就是为什么我们从不直接从应用程序本身发送电子邮件

    我们也很少在大型应用程序中使用多线程——只是没有足够的线程

    我们始终选择两个选项中的一个,这两个选项都具有良好的扩展性:

  • 消息队列,例如MSMQ。将电子邮件发送到消息队列,然后让一个或多个“服务器”接收出站邮件。可以无限地添加服务器。企业可扩展性

  • 数据库。将电子邮件发送到数据库,然后继续。编写一个单独的应用程序或服务来接收电子邮件并进行处理。同样,它可以很好地扩展,但通常不如消息队列

  • 这两种方法还有一个非常有用的好处:事务。您可以将这两个选项包装在TransactionScope中,这意味着,如果流程中出现任何其他错误,您可以在电子邮件实际发送之前回滚

    只有100%的已提交事务最终被转换为出站电子邮件

    没有什么比向客户发送一封写着“谢谢,您的订单已发送”的电子邮件更糟糕的了,之后在处理流程中发现实际上您缺货了


    希望这能有所帮助。

    我经常参与具有大规模邮件发送需求的部署。你说得对-电子邮件确实会大大降低应用程序的速度,这就是为什么我们从不直接从应用程序本身发送电子邮件

    我们也很少在大型应用程序中使用多线程——只是没有足够的线程