Phil Haack によって説明されている手法を使用して、ASP.NET WebForms アプリケーションでルーティングを使用しています。
これはほとんどの場合うまく機能しますが、場合によっては、最初の呼び出しがSystem.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath
返されるまでに数十秒かかることがあります。
これは、次の方法で発生します。
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
LapTimer lapTimer = new LapTimer();
string virtualPath = this.GetSubstitutedVirtualPath(requestContext, lapTimer);
if (this.CheckPhysicalUrlAccess && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, requestContext.HttpContext.User, requestContext.HttpContext.Request.HttpMethod))
throw new SecurityException();
IHttpHandler page = BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof(Page)) as IHttpHandler;
if (page != null)
{
//Pages that don't implement IRoutablePage won't have the RequestContext
//available to them. Can't generate outgoing routing URLs without that context.
var routablePage = page as IRoutablePage;
if (routablePage != null)
routablePage.RequestContext = requestContext;
}
return page;
}
これと同時に、(タスク マネージャーを使用して) C# コンパイラであるcsc.exeというプロセスが CPU の 10% ~ 50% を占有していることに気付きました。
なぜこれが起こるのか誰にも示唆できますか?