【问题标题】:SmtpClient.SendAsync decrease or increase performance?SmtpClient.SendAsync 降低还是提高性能?
【发布时间】:2012-04-17 23:43:14
【问题描述】:

如果我有 2 个 SmtpClient 对象并且我同时在这两个对象上调用 SendAsync() 方法,这 2 个发送请求是在一个线程中顺序处理还是在多个线程中同时处理? SendAsync() 方法的实现是什么?

如果每个 SendAsync() 方法调用都在来自 Web 服务器线程池的新线程中处理,这可能会导致 Web 服务器线程池中的空闲线程减少,从而降低整体性能(如果达到线程池最大限制) .

我搜索了 MSDN 文档,但没有找到如何处理异步方法的说明。

【问题讨论】:

    标签: c# .net asp.net smtp smtpclient


    【解决方案1】:

    很可能在幕后调用保持异步,依靠来自较低层(即 Winsock,在异步模式下使用)的回调来驱动继续处理。我希望一个线程能够处理多个异步发送调用,而不必等待较早的发送调用完成。由于吞吐量和资源使用的原因,以同步方式处理从客户端发出的异步调用或在通信堆栈中进一步向下处理每个调用的线程是没有意义的。

    对于只有 2 个调用,很可能它们将由单个线程“伪并发”处理(每个处理程序轮流处理来自 WinSock 的异步通知)。

    【讨论】:

      【解决方案2】:

      对于任何一个 SmtpClient 对象,您一次只能发送一条消息...MSDN Documentation 说:

      “调用 SendAsync 后,您必须等待电子邮件传输完成,然后再尝试使用 Send 或 SendAsync 发送另一封电子邮件。”

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 2015-08-21
        • 1970-01-01
        • 2011-03-01
        • 2010-09-14
        • 1970-01-01
        • 2010-11-15
        • 2021-12-17
        • 1970-01-01
        相关资源
        最近更新 更多