2009-04-19 6 views
2

J'ai deux applications WCF communiquant unidirectionnelles sur des canaux nommés. Tout est bien, sauf pour une chose: Normalement, le cycle demande/réponse prend zéro (temps marginal). Cependant, s'il y avait une période de, disons, une demi-minute sans aucune communication, la demande/réponse augmente jusqu'à ~ 300-500ms. J'ai regardé autour du filet et j'ai eu l'idée d'utiliser un mécanisme de rythme cardiaque/ping pour garder le canal de communication occupé. À l'aide d'essais et d'erreurs, j'ai constaté que lorsque je fais une requête toutes les 10 secondes, les temps de réponse restent bas. À partir d'environ 15 secondes, les temps de réponse "hoquet" commencent à apparaître.NetNamedPipe: variation du temps de réponse lorsque la communication est inactive

Maintenant, je me demande d'où vient ce phénomène. J'ai essayé de mettre tous les délais d'attente imaginables des deux côtés à> 1 minute, mais cela n'a pas aidé.

Quelqu'un peut-il expliquer ce qui se passe là-bas?

+0

J'ai ce même problème. Au début, je soupçonnais la mise en cache, mais les nouvelles données sont renvoyées instantanément si elles sont demandées dans les 15 secondes suivant un précédent appel au service. –

Répondre

0

Est-il possible que le processus de ralenti soit paginé sur le disque? Si vous conservez les processus aux deux extrémités occupées, mais ne faites pas la connexion occupé, cela arrive-t-il encore?

Cela peut ne pas être le cas, mais cela vaut la peine d'essayer.

+0

Je l'ai essayé et ajouté aux deux processus un fil faisant des calculs stupides. L'utilisation du processeur est restée à 0% pour les deux, mais je pense que c'était encore suffisant pour les empêcher d'être paginé. Hélas, le probelm décrit reste inchangé. Cela valait vraiment la peine d'essayer, cependant. Merci pour la suggestion- –

Questions connexes