maxWorkerThreads和线程计数问题

时间:2010-12-23 11:20:18

标签: .net asp.net multithreading iis-7 iis-6

我创建了一个ASP.NET应用程序,它在无限循环中创建线程。我在maxWorkerThreads的{​​{1}}中将processModel设置为20。

当我在perfmon中检查线程计数时,在工作进程中创建了大约7000个线程。

machine.config我有:

PageLoad()

功能:

using System.Threading;
...
int count = 0;
var threadList = new System.Collections.Generic.List<System.Threading.Thread>();
try
{
  while (true)
  {
    Thread newThread = new Thread(ThreadStart(DummyCall), 1024);
    newThread.Start();
    threadList.Add(newThread);
    count++;
  }
}
catch (Exception ex)
{
  Response.Write(count + " : " + ex.ToString());
}

如何使用IIS6 / 7限制ASP.NET中的线程创建?

2 个答案:

答案 0 :(得分:1)

您正在创建的线程不是ASP.NET工作线程,并且不受processModel指定的限制的限制。

在这里,您只是创建普通的旧.NET线程,除了可用于处理可创建的线程数量的进程可用的最大内存量之外,几乎没有任何内容。

我会考虑使用managed ThreadPool类。

但是,您应该质疑为什么需要在ASP.NET页面中生成后台工作线程。这通常被认为是一个坏主意。

答案 1 :(得分:0)

你是如何创建线程的?如果您使用ThreadPool.QueueUserWorkItem,那么我预计在任何给定时间都不会有超过20个线程运行。

但是,如果您正在生成线程并只是调用.Start(),那么您可以根据需要创建任意数量。