2011-08-17 4 views
0

Nous avons une application qui envoie plusieurs requêtes de threads au service SOAP. Nous balayons qu'avec l'augmentation du nombre de threads, le temps d'exécution de chaque requête augmente d'un ordre. Pour comprendre pourquoi, nous avons écrit une extension SOAP - en conséquence, il est devenu clair que même avec 5 flux de 16 processeurs, le temps de sérialisation est d'environ 95% du temps de la requête, 10 threads n'attendaient pas la requête (l'heure de la requête dans 1 thread est d'environ 150 ms). Qui a rencontré un tel comportement? On soupçonne que dans le service web, ou dans le sérialiseur ayant un bloc "mort".
P.S. Sur chaque thread crée sa propre instance du web-service.
P.P.S. Désérialiser le nombre de threads ne semble pas affecter.Utilisation du client de service Web dans une application multithread

+0

Utilisez-vous "Ajouter Web Reference"? Ne fais pas ça. Utilisez "Ajouter une référence de service" pour utiliser une pile de client de service Web plus moderne. En outre, si vous écrivez les services, écrivez-les dans WCF et vous pouvez utiliser binaire sur TCP/IP en plus de SOAP. –

+0

Les services existent déjà et nous ne pouvons pas le réécrire à WCF. Avez-vous rencontré ce problème? Vous avez résolu ce problème? – Boo

+0

La solution consiste à utiliser WCF. Le XML Serializer n'est tout simplement pas efficace. Le mieux que vous pouvez faire est de pré-générer les classes de sérialisation (avec sgen.exe), mais cela aide seulement le démarrage. –

Répondre

1

La solution consiste à utiliser WCF.

Le sérialiseur XML n'est simplement pas efficace. Le mieux que vous pouvez faire est de pré-générer les classes de sérialisation (avec sgen.exe), mais cela aide seulement le démarrage.

Le DataContractSerializer est beaucoup plus efficace. Cela limite la complexité du XML, en utilisant des éléments au lieu d'attributs, par exemple. Le résultat est une sérialisation et une désérialisation rapides, et la possibilité de sortir le XML en texte ou en binaire.

Questions connexes