ThreadPools用于加速网站

时间:2009-10-28 13:09:58

标签: c# asp.net multithreading

我试图弄清楚在ASP.NET站点中使用ThreadPools是否合适。关于这一点有很多讨论,但很难找到一个授权来源。

我正在构建一个用户填写表单并按下发送按钮的站点,这会触发要发送的邮件。我的问题是我的邮件供应商的API非常慢(100毫秒到12秒),这对应用程序的响应性不利。

这是个好主意吗?:

ThreadPool.QueueUserWorkItem(e =>
    EmailFactory.BuildBuyerEmailValidationEmail(client).Send()
);

表格每天使用约100-200次。

我想避免创建队列,因为这会增加应用程序的复杂性。

4 个答案:

答案 0 :(得分:3)

另一种选择是设置处理所有电子邮件路由的Web服务(例如WCF)。然后,您可以将服务方法配置为单向调用,以便当用户单击该按钮时,它会将请求发送到Web服务并立即返回到页面,因为它不等待Web服务处理。 IMO我会避免尝试直接使用IIS中的线程,并让它以自己想要的方式管理线程。

答案 1 :(得分:2)

这看起来对我很好。线程池每个处理器包含250个线程,所以即使这个表单每分钟提交50次,也不会有任何问题,因为那时只有大约10个线程并行工作

答案 2 :(得分:2)

为什么不使用Message Queue来完成此任务?基本上,您将把请求放入队列中,这可以在以后处理 - 站点保持良好和响应,并且您有一个旨在保证处理的机制。

答案 3 :(得分:1)

有两个可能的问题: 1)IIS可以在app域重新加载期间杀死后台线程(ThreadPool线程) 2)在高压下,ThreadPool中的实际工作可以比平时更晚安排(当达到最大线程数时,该项目将保留在内存中的队列中,直到有可用的线程)

但似乎ThreadPool完全适合您的情况(发送电子邮件) - 您不需要完美的可靠性。