diff --git a/aspnet/src/Application.cs b/aspnet/src/Application.cs
index 5535b523748..7b7f557b87b 100644
--- a/aspnet/src/Application.cs
+++ b/aspnet/src/Application.cs
@@ -1,3 +1,6 @@
+using System;
+using System.Configuration;
+using System.Threading;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
@@ -25,6 +28,7 @@ private void Start()
{
Routes();
Views();
+ Threads();
}
private void Routes()
@@ -57,6 +61,25 @@ private void Views()
ViewEngines.Engines.Add(new RazorViewEngine { ViewLocationFormats = new[] { "~/Views/{0}.cshtml" } });
}
+ private void Threads()
+ {
+ // To improve CPU utilization, increase the number of threads that the .NET thread pool expands by when
+ // a burst of requests come in. We could do this by editing machine.config/system.web/processModel/minWorkerThreads,
+ // but that seems too global a change, so we do it in code for just our AppPool. More info:
+ //
+ // http://support.microsoft.com/kb/821268
+ // http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx
+ // http://blogs.msdn.com/b/perfworld/archive/2010/01/13/how-can-i-improve-the-performance-of-asp-net-by-adjusting-the-clr-thread-throttling-properties.aspx
+
+ int newMinWorkerThreads = Convert.ToInt32(ConfigurationManager.AppSettings["minWorkerThreadsPerLogicalProcessor"]);
+ if (newMinWorkerThreads > 0)
+ {
+ int minWorkerThreads, minCompletionPortThreads;
+ ThreadPool.GetMinThreads(out minWorkerThreads, out minCompletionPortThreads);
+ ThreadPool.SetMinThreads(Environment.ProcessorCount * newMinWorkerThreads, minCompletionPortThreads);
+ }
+ }
+
public void Dispose()
{
}
diff --git a/aspnet/src/Web.config b/aspnet/src/Web.config
index ebd4fea1092..94bfc6ff714 100644
--- a/aspnet/src/Web.config
+++ b/aspnet/src/Web.config
@@ -29,6 +29,11 @@
+
+