J'ai un service net.tcp WCF hébergé avec le ServiceHost intégré, et lorsque je fais des tests de stress, j'ai un comportement étrange. La première fois que j'envoie un tas de demandes, on répond rapidement à 5 à 10 demandes, et les autres reviennent à environ 2 secondes d'intervalle. La deuxième fois que j'envoie les requêtes, 10 - 20 sont renvoyées rapidement, et reposent avec 2 intervalles de sencond. Les répétitions ci-dessus jusqu'à ce que je puisse obtenir plus de 100 demandes retournées rapidement, mais si j'attends une minute ou deux, l'utilisation de la mémoire du service diminue et les demandes retournent à 5-10 retour rapide.Performance de WCF avec net.tcp
Le service que je teste a un petit délai, de sorte que je peux obtenir plusieurs connexions ouvertes en même temps, si ce délai est supprimé, les demandes reviennent si rapidement que j'ai peut-être 2-5 connexions ouvertes en même temps . Ce délai consiste à simuler des connexions DB et d'autres éléments sortants. Du comportement, il semble que le ServiceHost alloue quelque chose, des threads, des instances de classe, mais je ne peux pas comprendre ce que c'est.
Je pourrais avoir une minuterie dans le client qui appelle le service pour continuer à fonctionner, mais cela semble être une mauvaise solution.
Si j'ai une charge soutenue élevée pour le service, il va croquer toutes les demandes rapidement, mais si j'ai une période de faible activité, puis une augmentation des connexions vient dans le service sera lent.
Je suppose que ma question est QU'EST-ce que le get est alloué pendant la charge élevée du service WCF, et comment puis-je configurer le service pour préallouer plus de choses qui sont allouées. J'ai fait plus de tests, et en regardant le taskmgr pour le processus, je peux voir que quand le servicehost est 'repos', il y a 10 threads ouverts, mais quand je commence à envoyer des requêtes, le thread compte. Tant que le nombre de threads est élevé, le servicehost peut traiter les demandes entrantes rapidement, mais si je suspends l'envoi des requêtes, le nombre de threads ouverts diminue et les demandes suivantes prennent plus de temps à traiter.
Maintenant, comment puis-je dire au servicehost de garder un tas de threads ouverts? Ou plus que le 10-12 qu'il garde par défaut?
Merci, j'ai vérifié le site, et les paramètres il y a déjà dans mon fichier de configuration, avec de hautes limites, si haut que je devrais être capable de gérer toutes les connexions entrantes à la fois au lieu de premier 5-10, puis un par 2 secondes. – Kim