2010-08-16 3 views
0

Je suis en train de développer une application web qui doit effectuer une tâche qui consomme beaucoup de CPU et de mémoire, et qui peut aussi durer plusieurs minutes. Afin d'obtenir une meilleure expérience utilisateur, j'ai également développé un service Windows qui héberge un service WCF qui exécute cette tâche "coûteuse" et qui communique avec l'application web en utilisant msmq (files d'attente de messages).Limiter l'utilisation des ressources du service WCF

Cela a fonctionné très bien jusqu'à ce que j'essaie de faire un test de charge ... Le service Windows commence à consommer beaucoup de ressources, de mettre le processeur à 100% et plus de 1 Go de mémoire. J'ai cherché des optimisations et j'ai fait beaucoup de réglages sur le code et je pense que c'est très efficace, mais la tâche demande juste beaucoup de ressources.

Le problème est que pendant que le service WCF fonctionne, le processeur s'utilise à 100% et l'application web tourne INCREDIBLY SLOW! Cela ne me dérange pas si la tâche que fait le service WCF prend quelques minutes de plus, mais je veux que l'application web fonctionne bien pour les utilisateurs. Donc, je me demande s'il existe un moyen de limiter les ressources que le service WCF peut consommer, en donnant la priorité à l'application Web.

Merci d'avance.

Juan

Répondre

0

La solution facile serait de placer le service WCF sur une autre machine.

Le fait que le service utilise beaucoup de CPU n'est probablement pas lié à vous en utilisant WCF.

Il y a quelques façons que vous pouvez être en mesure d'améliorer les performances de votre application web:

  • processus un seul message à la fois.
  • Divisez les travaux en plus petites parties.
  • Définir la priorité du service Windows sous la normale dans le gestionnaire de tâches
  • Installer plus de RAM sur le serveur
0

Je suppose que cela est un problème de conception de votre service Windows. Lorsque vous décidez d'héberger WCF dans le service Windows, vous devez contrôler l'utilisation des ressources = vous devez contrôler la limitation. Vous devez créer un contrôle configurable sur le traitement du service interne afin de pouvoir modifier la charge en fonction des ressources disponibles. Si vous hébergez WCF dans IIS, il fournit déjà un tel contrôle au niveau AppPool.

Il existe des outils freeware qui permettent de limiter l'utilisation du processeur pour un processus donné, mais ce n'est pas quelque chose que je recommanderais pour une utilisation en production. Cordialement, Ladislav

Questions connexes