Проблема с maxWorkerThreads и количеством потоков - PullRequest
0 голосов
/ 23 декабря 2010

Я создал приложение ASP.NET, которое создает потоки в бесконечном цикле.Я установил maxWorkerThreads на 20 в processModel в machine.config.

Когда я проверил количество потоков в perfmon, в рабочем процессе было создано около 7000 потоков.

В 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());
}

Функция:

void DummyCall()
{
   System.Threading.Thread.Sleep(1000000000);
}

Как ограничить создание потоков в ASP.NET с IIS6 / 7?

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Потоки, которые вы создаете, не являются рабочими потоками ASP.NET и не ограничены ограничениями, указанными processModel.

Здесь вы просто создаете простые старые потоки .NET и практически ничегомаксимальный объем памяти, доступный для процесса, чтобы ограничить число потоков, которые вы можете создать.

Я бы рассмотрел использование класса managed ThreadPool.

ОднакоВы должны задаться вопросом, почему вам нужно создавать фоновые рабочие потоки на ваших страницах ASP.NET.Обычно это считается плохой идеей.

0 голосов
/ 23 декабря 2010

Как вы создаете темы?Если вы используете ThreadPool.QueueUserWorkItem, то я ожидаю, что в любой момент времени будет запущено не более 20 потоков.

Если, однако, вы порождаете потоки и просто вызываете .Start(), вы можете создать столькокак хочешь.

...