[C#/Winform] Mr Propre

Je suis en train de faire des tests pour comprendre comment implémenter une communication asynchrone entre un serveur et des milliards de clients (bon, j’ai pas essayé avec plus que 5, mais c’est pas le sujet). Histoire de faire les choses proprement, j’ai donc écrit une petite application server et client, qui s’envoie des infos dans tous les sens. Bien entendu, pour faire les choses proprements, il y a des delegate, des event, des thread, des Invoke et tout. Globalement, ca marche plutôt bien. Mon seul gros problème, c’est que dans certains cas de figure, une fois l’application terminée (généralement à un moment où elle est pas censée) elle reste en mémoire.

J’en déduis donc que malgré toutes mes précautions (renforcées à grand coup de Dispose), il reste un truc qui tourne dans son coin (un thread pas fini, un socket ouvert, ou que sais-je). Mais c’est difficile de trouver ce que c’est.

Je me demandais si qqu’un connaitrais pas un programme qui me permettrait de trouver ca en deux coups de cuillere à pot (oui, c’est mon côté faineant qui se manifeste).

[Edit] Comme quoi, il suffit de poster pour avoir une idée. En attachant le débugger au process, et en faisant pause, j’ai ptete trouvé une piste. Ceci dit, si vous avez un soft miracle, je reste preneur B)

Hmmm… Visual Studio!
En mode debug, tu as une fenêtre qui te permet de voir les threads de ton processus, les mettre en pause pour voir ou est-ce qu’ils sont bloqués… Après, c’est jamais complètement évident de savoir pourquoi tel ou tel thread tourne encore, mais ca peut aider.

Process Explorer ?

[quote=“girafologue, post:2, topic: 33875”]Hmmm… Visual Studio!
En mode debug, tu as une fenêtre qui te permet de voir les threads de ton processus, les mettre en pause pour voir ou est-ce qu’ils sont bloqués… Après, c’est jamais complètement évident de savoir pourquoi tel ou tel thread tourne encore, mais ca peut aider.[/quote]

ah, j’ai du la louper, j’ai juste trouvé celle avec la liste des appels à un endroit donné.

Ben, process explorer va me donner la liste de tous les process, mais je sais déjà lequel c’est le process qui me pete les noix, c’est un des miens B) De plus, mon appli tourne sur plusieurs thread, mais un seul processus. Enfin, bien que PE donne la liste des ressources utilisées, ca me dit pas vraiment qui bloque quoi.

Creuses un peu alors, si tu doubles cliques sur un process, tu as plus d’infos, notemment sur les threads, sur .net, etc.

Methode de saligot, mais rudement efficace (dans mon cas, c’est pour eviter le temps d’attente de retour d’une boucle d’un démon qui tourne a l’interrieur de mon programme) :

A ajouter la fin de code de fermeture du programme (quand tout est bien sauvé), j’approche les 101% d’efficacité a chaque fois, ça ne t’empeche pas de chercher le vilain thread qui t’ennuie.

Qui a dit “cochon” ?

Moi. C’est ignoble.

Haha, j’ai déjà pensé à faire un paquet de saloperie, mais ca, jamais. sors son carnet et en prend bonne note