J'utilise le routage avec mon application ASP.NET WebForms, en utilisant la technique décrite par Phil Haack:de routage avec webforms Utilisation - CreateInstanceFromVirtualPath parfois très lent
Cela fonctionne bien la plupart des l'heure, mais à l'occasion le premier appel à System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath
prend des dizaines de secondes pour revenir.
Cela se produit dans la méthode suivante:
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;
}
En même temps que cela, je l'avis (en utilisant le Gestionnaire des tâches) qu'un processus appelé csc.exe, le compilateur C#, prend en hausse de 10% à 50% de mon processeur.
Quelqu'un peut-il suggérer pourquoi cela se produirait?
J'ai essayé ceci, et il appelle 'aspnet_compiler.exe', plutôt que' csc.exe' ... –
Même la précompilation laissera des bouts .aspx sur le serveur pour qu'ASP.NET sache comment les manipuler, ce qui serait provoque l'exécution de 'aspnet_compiler.exe'. Cependant, cela ne devrait pas prendre autant de temps. Combien de fichiers avez-vous et combien de temps cela prend-il? Comme je l'ai dit plus tôt, il s'agit d'un comportement ASP.NET normal, à moins que cela ne prenne un caractère déraisonnable. Btw, même si vous n'utilisez pas de sites précompilés, le fichier 'aspnet_compiler.exe' sera exécuté, suivi de' csc.exe'. – marcind