我在一些继承的 C# winforms 代码中遇到了泄漏的句柄问题(“没有足够的配额来处理这个命令。”),所以我去使用 Sysinternals 的句柄工具来追踪它。原来是事件句柄泄漏了,所以我试着用谷歌搜索它(花了几次尝试找到一个没有返回“你的意思是:事件处理程序吗?”的查询)。据张俊峰介绍,事件句柄是使用 Monitor 生成的,就事件句柄处置和同步原语而言,可能存在一些奇怪的规则。
我不完全确定我的泄漏句柄的来源完全是由于简单的长寿对象调用了很多同步的东西,因为这段代码还处理 HID 接口和大量的 win32 编组和互操作,并且没有做任何事情我知道的同步。无论哪种方式,我都将在 windbg 中运行它并开始追踪句柄的来源,并花费大量时间学习这部分代码,但我很难找到有关什么事件的信息把手放在第一位。
事件内核对象的msdn 页面只是链接到通用同步概述......那么什么是事件句柄,它们与互斥锁/信号量/其他有什么不同?