J'ai eu un problème de fuite de poignée ("Pas assez de quota disponible pour traiter cette commande") dans un code winforms C# dont j'ai hérité, j'ai donc utilisé le logiciel Sysinternals's Poignée pour le retrouver. Il s'est avéré que c'étaient les poignées d'événement qui fuyaient, alors j'ai essayé de faire une recherche sur Google (il m'a fallu plusieurs tentatives pour trouver une réponse). interrogation qui ne renvoie pas "Did you mean : event gestionnaire ?"). D'après le Junfeng Zhang Les poignées d'événements sont générées par l'utilisation de Monitor, et il peut y avoir des règles bizarres en ce qui concerne l'élimination des poignées d'événements et les primitives de synchronisation.
Je ne suis pas tout à fait sûr que la source de mes fuites de handles soit entièrement due à des objets de longue durée de vie appelant beaucoup de synchronisation, car ce code traite également des interfaces HID et beaucoup de marshaling et d'interopérabilité win32, et ne faisait pas de synchronisation à ma connaissance. Quoi qu'il en soit, je vais juste lancer ceci dans windbg et commencer à tracer l'origine des handles, et aussi passer beaucoup de temps à apprendre cette section du code, mais j'ai eu beaucoup de mal à trouver des informations sur ce que sont les event handles en premier lieu.
En page msdn pour l'objet event kernel, il y a juste un lien vers la vue d'ensemble de la synchronisation générique... alors qu'est-ce que les event handles, et en quoi sont-ils différents des mutex/semaphores/quoi que ce soit d'autre ?