50 votes

Comment garder ASP.NET assemblées dans le domaine d'application à la vie?

Scénario: j'ai un n-Tier entreprise ASP.NET application déployée à l'aide de Web des Projets de Déploiement. Tous les niveaux produire indépendant des assemblages qui est consommée par la ASP.NET application.

Problème: Quand je lance l'application. pour la première fois, après le déploiement, il faut beaucoup de temps pour dépendante de la charge assemblées dans la mémoire. Mais une fois chargé son éclairage app rapide. Dans le cas où si il n'y a pas d'utilisateurs accédant à l'application, IIS décharge les assemblées de la mémoire et lorsqu'un utilisateur essaie d'accéder à l'application sur une plus tard instance, il va sur le chargement de toutes les assemblées une fois de plus prendre la même quantité de temps à charger comme il faut pour le faire pour la première fois.

Je suis à la recherche d'une solution qui me permet de garder mon assemblées chargées dans la mémoire persistante de la substitution de la nature volatile des assemblées vers la résidence en mémoire.

Ou toute autre solution qui permet aux utilisateurs heureux de se servir de l'application de résoudre le problème mentionné.

72voto

Rex M Points 80372

Dans IIS 6, accédez à l'Application des Piscines de la section, puis clic-droit > Propriétés sur la piscine qui héberge le ASP.NET l'application en question. Allez à l'onglet Performances, puis décochez la case "arrêter les processus de travail après avoir été inactif pendant:"

Dans IIS 7, allez dans le volet Connexions et de trouver des Pools d'Applications et sélectionnez Paramètres Avancés pour la piscine qui héberge votre application. Trouver le "Délai d'Inactivité de la" propriété et le régler sur "0" (ce qui désactive).

La valeur par défaut est de 20 minutes d'inactivité. En décochant la case, une fois que votre domaine d'application est chargé par le processus de travail, il ne mourra jamais (à moins que vous les tuez le processus ou quelque chose de sûr). Par défaut, IIS recycler le processus lorsqu'il atteint une certaine limite, comme une mémoire de la pac, mais il permettra également de commencer un nouveau projet et de la phase sur" toutes les demandes entrantes jusqu'à ce que le vieux est utilisé, de manière à réduire au minimum les perturbations.

J'ai aussi écrit un petit c# de la classe qui va garder votre ASP.NET application vivant (alternate version archivée) dans des circonstances normales. Depuis il fonctionne au sein de l'application, de toute évidence, il ne peut pas arrêter IIS ou tout autre chose explicitement de tuer le processus, mais elle permet de conserver l'application "à chaud", par exemple, l'application ne sera jamais d'inactivité assez longue pour IIS pour décider de l'éteindre.

Si vous n'avez pas de contrôle direct sur votre configuration IIS (partage de l'hôte, par exemple), votre meilleur pari est d'avoir une petite application qui s'exécute sur un système séparé - dire, dans ce cas, une station de travail - qui frappe votre site toutes les x minutes pour garder le pool d'applications à partir de l'expiration du délai. Rien de compliqué - une simple WebRequest et une boucle while() dans une application de console va faire.

3voto

Gusman Points 2459

Un des avantages de l'ASP .net est la possibilité de créer statique (partagé) des instances d'objets.

Pour éviter la nécessité d'un processus externe, vous pouvez créer une statique de la minuterie (par exemple).asax qui appelle une page sur le domaine avec un simple WebRequest. De cette manière, le site maintient en vie de lui-même jusqu'à une réinitialisation manuelle de la piscine est effectuée.

0voto

Namoguy Points 1

J'ai écrit une petite application console C# qui garde mes 4 sites en vie toutes les 10 minutes via le planificateur de tâches de windows. La vie est une fois de plus bonne. Nous n'avons pas exécuter l'application à partir de 2-5h juste pour le dessert peut faire tout le nettoyage de la mémoire, si elle même des questions. pour nos sites, il y a rarement quelqu'un dans ces heures de toute façon.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X