Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于加速站点的线程池_C#_Asp.net_Multithreading - Fatal编程技术网

C# 用于加速站点的线程池

C# 用于加速站点的线程池,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我试图弄清楚在ASP.NET站点中使用线程池是否好。关于这一点有很多讨论,但很难找到一个权威的来源 我正在构建一个站点,用户在其中填写表单并按下发送按钮,这将触发要发送的邮件。我的问题是,我的邮件供应商的API非常慢(100毫秒到12秒),这对应用程序的响应性不好 这是个好主意吗 ThreadPool.QueueUserWorkItem(e => EmailFactory.BuildBuyerEmailValidationEmail(client).Send() ); 该表格每天

我试图弄清楚在ASP.NET站点中使用线程池是否好。关于这一点有很多讨论,但很难找到一个权威的来源

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

这是个好主意吗

ThreadPool.QueueUserWorkItem(e =>
    EmailFactory.BuildBuyerEmailValidationEmail(client).Send()
);
该表格每天使用100-200次


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

有两个可能的问题: 1) IIS可以在应用程序域重新加载期间杀死后台线程(线程池线程) 2) 在高压下,线程池中的实际工作可以安排得比正常情况晚得多(当达到最大线程数时,该项将保留在内存队列中,直到有可用线程为止)


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

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

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

另一个选项是设置一个web服务(如WCF)来处理您的所有电子邮件路由。然后,您可以将服务方法配置为单向调用,这样当用户单击按钮时,它会向webservice发出请求并立即返回页面,因为它不会等待web服务处理。在我看来,我会避免直接使用IIS中的线程,并让它以自己想要的方式管理线程