web-dev-qa-db-fra.com

Le rendu ASP.NET MVC semble lent

J'ai créé une toute nouvelle application Web MVC4 dans Visual Studio, et je n'ai rien fait de plus avec cela que d'y ajouter un contrôleur Home et une vue d'index "Hello world". J'ai ensuite installé le package MiniProfiler NuGet et mis le couple de lignes nécessaire dans _Layout.cshtml. Voici ce que j'obtiens lorsque j'exécute le site en mode Release (hébergé dans IIS):

MVC rendering picture

Le temps de rendu varie selon la charge de page, mais 130 ms est à peu près aussi rapide que possible. Cela me semble un peu lent, car j'ai vu d'autres personnes obtenir des pages rendues en 30 ms ou plus rapidement. Des idées pour lesquelles le rendu serait si lent avec un tout nouveau projet MVC4 vide? Mon processeur est un Intel Core i5-2400 et la machine a 16 Go de RAM.

Soit dit en passant, ce n'est pas la première fois que la page est chargée; J'ai rechargé la page plusieurs fois avant d'obtenir ce résultat de 130 ms.

MISE À JOUR:
J'ai suivi les conseils dans la réponse de PSCoder (supprimez tout sauf RazorViewEngine), et cela a réduit de moitié le temps de rendu:

MVC rendering picture 2

C'est vraiment bien, mais j'obtiens toujours environ 70 ms ou plus pour l'action principale Render de la page; idéalement, je voudrais diviser par deux ou mieux.

Plus précisément, je voudrais demander:

  • Ce temps de rendu semble-t-il trop lent ou est-il moyen pour ma machine?
  • Existe-t-il un moyen de l'accélérer?
47
Jez

Cela pourrait aider à améliorer le problème de performances lié à ASP.NET MVC, une amélioration des performances que vous pouvez faire consiste à effacer tous les moteurs de vue et à ajouter ceux que vous utilisez. dire par exemple: - RazorViewEngine. MVC enregistre 2 moteurs de vue par défaut Webforms et Razor moteurs de vue, donc la suppression et l'ajout de ceux qui sont utilisés seuls améliorera les performances de recherche.

Vous pouvez l'ajouter dans global.asaxApplication_Start.

        ViewEngines.Engines.Clear();    
        ViewEngines.Engines.Add(new RazorViewEngine());      

Afin d'utiliser complètement la mise en cache de la recherche de vues et donc à nouveau le gain de performances, compilez le code en mode release et assurez-vous que votre web.config le fichier est configuré avec <compilation debug="false" /> pour afficher la mise en cache de la mise en cache.

76
PSL

Ajout à la réponse de @PSL - nous ne vérifions que les fichiers `.CSHTML

ViewEngines.Engines.Clear();

IViewEngine razorEngine = new RazorViewEngine() { FileExtensions = new string[] { "cshtml" } };

ViewEngines.Engines.Add(razorEngine);

Assurez-vous également que vous exécutez dans Release Mode - qui est absolument critique, car ASP/Razor/MVC ' applique une mise en cache assez agressive ' en mode release

<compilation targetFramework="4.0" debug="false"> dans votre Web.Config fichier.

Sam Saffron/Stack Overflow a également examiné les performances de rendu des vues:

http://samsaffron.com/archive/2011/08/16/Oh+view+where+are+thou+finding+views+in+ASPNET+MVC3+

56
Stuart.Sklinar

Les vues sont compilées avant utilisation - donc la première fois, elles sont lentes.

Ils sont ensuite recompilés si le .cshtml changements de fichiers - ce qui signifie que les répertoires dans lesquels les vues sont stockées sont surveillés. La vitesse du disque dur sera donc un facteur pour les vues MVC.

Même s'ils ne font rien, chaque moteur de rendu vérifie le disque dur pour .cshtml ou .aspx des dossiers. Étant donné que la suppression d'un moteur de rendu l'a rendu deux fois plus rapide, je pense que la vitesse du disque est le problème:

  • Les vues sont stockées sur un lecteur réseau, ou
  • Le disque dur est très lent
0
user1023602