IIS和Parallel.ForEach

时间:2012-08-08 08:30:32

标签: c# iis parallel-processing

我在IIS中托管的WCF服务上使用Parallel.ForEach。

据我所知,并行循环中的每个任务都会打开线程。

但是IIS对可以打开的线程的数量有限制。我认为是20岁。

所以我的问题是:它是否建议在IIS进程上使用Parallel.ForEach?

1 个答案:

答案 0 :(得分:3)

据我所知,在IIS中使用TPL时存在一些问题。

首先,IIS对其线程池中的线程没有严格的限制。它实际上取决于线程正在做什么(CPU绑定,IO绑定等)。因此,线程数本身并不重要。

其次,据我所知,TPL将从线程池中获取线程。因此,实际上,您正在使用可用于服务请求的线程。同样,这可能会很糟糕,具体取决于您消耗的流量。

第三,IIS应用程序池将循环使用。当发生这种情况时,再次据我所知,IIS将冻结线程的状态并将它们移动到另一个进程。这可能会对线程操作产生意想不到的影响。

通常,您希望使用TPL(Parallel.ForEach),因为您的运行时间很长。对于长时间运行的进程,最好调用另一台主机(Windows服务)来完成繁重的工作。例如,在Windows服务中,您可以更好地控制管理线程的方式。

希望这有帮助。