0

そのため、私は典型的な Web フォームを使用しており、フォームを送信してから次の画面に到達するまでに長い遅延があることに気付きました。いろいろ試してみたところ、遅延の原因は MailMessage の部分であることがわかりました。誰かにこれを見てもらい、提出をスピードアップするためにこれを改善する方法について提案してもらいたいです。

コードビハインド

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;
   }

物事を少しスピードアップするためにできることはありますか? 私の最大の問題は、[送信] をクリックしたとは思わず、もう一度クリックしてしまうことです。送信ボタンがクリックされた後にグレーアウトできることはわかっていますが、以前は気付いていなかった速度の改善を期待していました.

4

2 に答える 2

3

私は、大規模なメール アウト要件を伴う展開によく関与しています。その通りです。電子メールは確かにアプリの速度を大幅に低下させます。そのため、アプリケーション自体から直接電子メールを送信することはありません。

また、大規模なアプリでマルチスレッドを使用することはめったにありません。循環するのに十分なスレッドがありません。

常に 2 つのオプションのいずれかを選択します。どちらも適切にスケーリングします。

  1. MSMQ などのメッセージ キュー。電子メールをメッセージ キューに書き込んでから、1 つ以上の「サーバー」に送信メールをピックアップさせます。サーバーを無限に追加できます。エンタープライズ スケーラビリティ。

  2. データベース。メールをデータベースに書き出してから、先に進みます。メールを取得して処理する別のアプリまたはサービスを作成します。繰り返しますが、非常にうまくスケーリングできますが、通常はメッセージ キューほどではありません。

どちらのアプローチにも、非常に便利な利点が 1 つあります。それは、トランザクションです。両方のオプションを TransactionScope でラップできます。つまり、プロセスで何か問題が発生した場合、電子メールが実際に送信される前にロールバックできます。

最終的に送信メールに変換されるのは、100% コミットされたトランザクションのみです。

顧客に「ありがとう、ご注文は発送されました」という内容のメールを送信した後、処理パイプラインで在庫切れであることが判明することほど悪いことはありません。

お役に立てれば。

于 2013-10-22T23:46:59.503 に答える