2010-05-27 16 views
0

Je développe un service de données WCF sur un modèle de données Entity Framework 4.0, mais nous ne pouvons pas aller à la production dans les circonstances actuelles.Services de données WCF: Appel à SaveChanges() provoque 100% CPU

Mon application cliente ajoute et modifie de nombreux objets, environ 100 000. Ensuite, il appelle la méthode SaveChanges du service pour conserver tous les changements dans une seule action. Le service de données WCF est hébergé dans un processus hôte NServiceBus, bien que je ne sache pas si cela contribue au problème.

Cela fonctionne, mais cela prend plus d'une heure sur une machine virtuelle Win2008 x64 à 1 processeur, 4 Go de RAM. Plus important encore, l'utilisation du processeur va jusqu'à 100%. La consommation de RAM varie entre 75% et 85%. C'est dans une machine virtuelle d'environnement de développement, de sorte que la base de données SQL Server 2005 que le service couvre est locale. Le processus hôte du service de données WCF absorbe environ 1,2 Go pendant ce processus.

Des idées? Merci d'avance!

+0

La consommation de mémoire peut être pris en compte facilement. Mais avez-vous regardé quel service mange le temps CPU si mal? – Kangkan

+0

Je pensais que c'était le processus hôte du service de données WCF qui prenait le temps, mais ce n'était pas ... Le service de données WCF est réellement hébergé dans IIS, c'est le client qui est hébergé dans un processus hôte NServiceBus. Ainsi, c'est le client qui prend presque tout le temps (encore une fois, fluctuant - entre 85% et 98% du temps CPU). – Roy

+0

Profil de votre application. C'est la première étape pour tout problème de performance. –

Répondre

0

Avez-vous vraiment besoin de modifier tous les objets d'une transaction? Si non, je proposerais que le contexte des données soit ouvert le plus rapidement possible.

  • Ouvrir contexte de données
  • mise à jour l'objet
  • Enregistrer les modifications
  • contexte de données à proximité
Questions connexes