2016-07-21 1 views
0

J'ai un scénario bizarre qui indique clairement que je ne comprends pas le WCF aussi bien que je le devrais.Mauvaises performances renvoyant 50 000 entités de WCF

Je liste 50 000 enregistrements et créer des «Entités» que je veux retourner à mon front-end. L'ensemble du processus prend moins de 2 secondes à compléter.

Mais alors, le serveur de sérialisation démarre côté - en dehors de mon "code" - mais il utilise un seul processeur pour sérialiser les données - cela prend 4 minutes? Sauf pour surcharger le "onserialize" - quelles sont les autres options disponibles? Je fais usage de BasicHttpChannel - pas de sécurité actuellement - et l'encodage est par défaut - pas MTOM.

Tout conseil serait génial - merci!

EDIT:

J'ai un simple appel de charge qui renvoie une POCO (rien de spécial) - seules les données - 5 propriétés - toutes les chaînes - une longue. Pour clarifier - pour charger les données du frontend via WCF jusqu'à ce que les données (POCO) atteignent le «point d'entrée» à nouveau où le «appel» est retourné prend 2 secondes. Par la suite, je vois seulement mon processeur "pointe" jusqu'à 100% pendant environ 4 minutes - mon avis est là où les données sont sérialisées à renvoyer - Je veux savoir si WCF a une option pour permettre à plus de processeur de faire ce travail - ou est ma seule option pour remplacer OnSerializing?

+1

À quoi ressemblent vos «entités»? S'agit-il de classes Entity Framework fortement décorées avec de multiples propriétés de navigation (éventuellement des références circulaires), ou des DTO allégées avec peu ou pas d'imbrication? – CodeCaster

+0

Il est peu probable que nous serons en mesure de vous aider avec cette information. Pouvez-vous fournir un [mcve]? À quoi ressemblent vos contrats de service, d'exploitation et de données? Vos POCO simples sont-ils retournés ou quelque chose d'autre? Vous mentionnez "Entité". Utilisez-vous le framework d'entité? Si oui, quelle version? Avez-vous essayé [en remplaçant 'XmlSerializer' par' DataContractSerializer'] (https://msdn.microsoft.com/en-us/library/ms733901 (v = vs.110) .aspx)? Si oui, quel a été l'impact sur les performances? – dbc

+0

Oui - J'ai un appel de charge simple qui renvoie un POCO (rien de spécial) - seulement les données - 5 propriétés - toutes les chaînes - une longue. Tout ce que je peux dire, c'est que si la sérialisation arrive, je peux voir clairement que seulement 1 de mes 10 CPU tourne à 100% alors que l'autre est inactif quand il sérialise mes données - mais l'appel de charge réel utilise tous les processeurs. – d1trut5r

Répondre

-1

Lien: Transfer large amount of data in WCF service

Une autre possibilité est de réduire la quantité de documents qui doivent être publié en feuilleton par la WCF-Service. Vous pouvez vérifier si l'enregistrement a été mis à jour depuis la dernière requête et ne renvoyer que les enregistrements qui ont été modifiés dans l'interface.

+0

Salut - merci pour les commentaires - malheureusement c'est le cas - nous avons eu 50 000 demandes qui se sont produites - nous devons traiter ces demandes .. – d1trut5r

+0

Vous ne devriez pas poster des liens comme réponses, mais expliquer ce qui est discuté dans ce lien. Ce lien particulier explique comment vous pouvez envoyer de grandes réponses de WCF, ce que OP réussit déjà à faire. – CodeCaster