Notre site Web utilise ASP.NET MVC pour une partie des pages qu'il contient. Ces URL ont généralement la forme http://oursite/detail.mvc/12345/pictures/ Dans cette URL, le 12345 est un ID dans la base de données. Nous avons plusieurs centaines de milliers d'objets pour lesquels nous montrons des pages de détails. Récemment, nous avons remarqué une augmentation de l'utilisation de la mémoire pour le site, donc j'ai enquêté un peu. Nous avons fait un vidage de mémoire du site de production et avons constaté qu'une quantité importante de l'utilisation totale de la mémoire était causée par des chaînes dans le cache du formulaire "dmachine/webroot/1/site/detail.mvc/12345/images /" et "H : \ site \ detail.mvc \ 12345 \ images \ ". Une recherche plus approfondie et une utilisation intensive de Reflector ont montré que ces chaînes sont stockées dans le cache ASP.NET sous la forme d'un objet System.Web.CachedPathData. Ceci est créé par ConfigurationManager lorsqu'il lit les informations du fichier web.config. Il appelle HttpContext.GetSection() -> HttpContext.GetConfigurationPathData() -> CachedPathData.GetVirtualPathData(). Finalement, dans CachedPathData.GetConfigPathData, le chemin virtuel est déterminé pour le chemin demandé et ceci est mis en cache dans le cache ASP.NET sans expiration. Maintenant, le problème est que nous avons des millions d'URL différentes, et pour chaque chemin, le système de configuration stocke un certain nombre de chaînes (configPath, chemin virtuel, chemin physique) dans le cache. Au fil du temps, cette information consomme plusieurs centaines de Mo, presque toutes les données dans le cache. Je suppose que lorsque la mémoire se fait rare, ces entrées seront supprimées, mais dans les opérations, elles ne font pas confiance aux processus qui grandissent et se développent. Cela semble également très inefficace. Existe-t-il un moyen de dire à HttpContext de ne pas mettre en cache ces informations pour chaque URL unique? Ou peut-être pouvons-nous d'abord mapper le chemin de la requête vers une URL plus simple et l'utiliser pour sélectionner le fichier web.config correct?Empêcher de nombreuses URL MVC différentes de remplir le cache ASP.NET
Répondre
Eh bien, je pensais au-dessus (Teun et je travaille dans la même entreprise), et nous avons deux options pour autant que je peux dire:
Ne rien faire. Cet article contient un commentaire d'un gars de l'équipe asp.net, et il montre quelques façons d'empêcher la croissance et la croissance du cache: http://forums.asp.net/p/985551/3297967.aspx#3297967, mais ne résout pas le problème de l'écriture d'une entrée de cache pour chaque route possible, mais garantit que le cache ne génère pas d'exception de mémoire insuffisante.
résoudre le problème avec une solution de contournement, utiliser des paramètres querystring au lieu de liaisons fixes (/controller.mvc?action=X & params = Y à la place de controller.mvc/action/params). De cette façon, seul controller.mvc est mis en cache.
Après tout, je ne pense pas que ce soit vraiment un problème.
- 1. asp.net mvc url routing
- 2. URL ASP.NET MVC Routes
- 3. ASP.net MVC HomeController URL
- 4. Le cache ASP.Net est-il partagé entre différentes sessions utilisateur?
- 5. Cache Asp.net Mvc Page d'accueil
- 6. Asp.Net MVC - ValidationMessage() - comment empêcher l'échappement HTML?
- 7. Mémoires de mise en cache de données dans ASP.NET MVC
- 8. ASP.NET MVC: Hiérarchie de routage URL
- 9. ASP.NET MVC mappage des URL différentes de {controller}/{action} avec des zones
- 10. Mise en cache dans le framework ASP.NET MVC
- 11. ASP.NET MVC résoudre les URL en javascript
- 12. URL de résultat ASP.NET MVC Html.ActionLink - la méthode de codage
- 13. ASP.NET MVC: Création de routes/URL IIS6 et IIS7-friendly
- 14. ASP.NET MVC: Formulaire d'entrée aux URL jolies
- 15. ASP.NET MVC une route, deux vues différentes
- 16. Cache de premier niveau entre différentes sessions?
- 17. Deux URL différentes peuvent-elles être routées vers la même vue dans ASP.NET MVC?
- 18. LoginUrl différent pour différentes URL avec ASP.NET MVC et l'authentification par formulaires
- 19. Empêcher le débordement de la pile pour de nombreuses connexions Silverlight Socket non fermées
- 20. ASP.NET MVC, Contrôle utilisateur individuel du cache
- 21. Comment implémenter un fournisseur de cache personnalisé avec ASP.NET MVC
- 22. URL ASP.NET MVC dans une requête JSON
- 23. ASP.NET MVC - Liens arrière URL erronée
- 24. ASP.NET MVC: routage url vs querystring
- 25. ASP.NET MVC - Regex pour une URL Slug
- 26. Obtenir le code HTML d'une URL dans ASP.NET MVC
- 27. Nom du flux URL dans ASP.NET MVC
- 28. asp.net routage url mvc - nom sous dossier
- 29. ASP.NET MVC Génériques Html et Url helpers
- 30. ASP.Net MVC - Authentification de formulaires à l'aide d'une URL externe
L'option 2 semble plutôt boiteuse, car elle tue l'une des fonctionnalités les plus belles et les plus visibles de la structure ASP.NET mvc. Dans notre cas, cela n'aurait pas d'importance, car nous avons aussi un système de réécriture ISAPI. Mais cela semble toujours une solution boiteuse. –