2016-01-14 2 views
1

Как настроить пул потоков max в IIS Express?ThreadPools в IIS Express

Запуск следующего кода от контроллера WebAPI:

int workers; 
int completions; 
System.Threading.ThreadPool.GetMaxThreads(out workers, out completions); 

Результаты в следующем:

workers = 2 
completions = 2 

Это слишком низким, чтобы запускать любые другие async задачи. Когда я запускаю его в консольном приложении, я получаю значительно более высокие цифры.

workers = 1023 
completions = 1000 

Как отрегулировать эти цифры для моего приложения WebAPI и IIS Express?

+1

Привет, IIS Express ограничен таким образом? Я имею в виду, что это может быть по дизайну ... – ipavlu

ответ

2

Похоже, что это может быть установлено IISExpress/Helios как слишком низкое. Это было изменено для будущих выпусков.

Исправление, которое подробно указано here, заключается в том, чтобы сделать следующее в вашем коде при использовании IISExpress. Я завернул код в директивах компилятора, чтобы убедиться, что это только скомпилировано в конфигурации сборки DEBUG.

public Startup() 
    { 
#if DEBUG 
     // HACK 
     // Set worker threads as HElios sets them too low for IIS Express 
     // https://github.com/aspnet/Home/issues/94 
     int newLimits = 100 * Environment.ProcessorCount; // this is actually # cores (including hyperthreaded cores) 
     int existingMaxWorkerThreads; 
     int existingMaxIocpThreads; 
     System.Threading.ThreadPool.GetMaxThreads(out existingMaxWorkerThreads, out existingMaxIocpThreads); 
     System.Threading.ThreadPool.SetMaxThreads(Math.Max(newLimits, existingMaxWorkerThreads), Math.Max(newLimits, existingMaxIocpThreads)); 
#endif 
    }