我创建了一个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中的线程创建?
答案 0 :(得分:1)
您正在创建的线程不是ASP.NET工作线程,并且不受processModel
指定的限制的限制。
在这里,您只是创建普通的旧.NET线程,除了可用于处理可创建的线程数量的进程可用的最大内存量之外,几乎没有任何内容。
我会考虑使用managed ThreadPool
类。
但是,您应该质疑为什么需要在ASP.NET页面中生成后台工作线程。这通常被认为是一个坏主意。
答案 1 :(得分:0)
你是如何创建线程的?如果您使用ThreadPool.QueueUserWorkItem
,那么我预计在任何给定时间都不会有超过20个线程运行。
但是,如果您正在生成线程并只是调用.Start()
,那么您可以根据需要创建任意数量。