确定GDI句柄和USER对象的数量
我们为Windows窗体UI渲染引擎开发了一个小型测试套件,可以在自动运行测试用例的同时测量性能并检测内存泄漏。 现在我们也想检查手柄泄漏。 在桌面平台上,我们可以使用以下代码:
[DllImport("User32")] private extern static int GetGuiResources(IntPtr hProcess, int uiFlags); using (var process = Process.GetCurrentProcess()) { var gdiHandles = GetGuiResources(process.Handle, 0); var userHandles = GetGuiResources(process.Handle, 1); }
此方法似乎在Windows Mobile中不可用。 是否有另一种方法可以在Windows Mobile / CE上以编程方式确定这些值?
这更像是一个建议,而不是一个答案。
您可以要求将所有“句柄”方法放在一个单独的类中(我有一个名为User32
, coreDLL
等的类)。
然后,您可以在每次使用资源时递增计数器,也可以将您创建的每个新句柄添加到私有管理列表,然后再传递该句柄。
现在,在项目关闭之前,请确保您的计数器已回零或列表中的所有句柄都已关闭。
未经测试的代码 – 目前我还没有VS2008。
[DllImport("User32")] private extern static int GetGuiResources(IntPtr hProcess, int uiFlags); private static List m_handles = new List (); public static IntPtr[] GetGuiResources() { using (var process = Process.GetCurrentProcess()) { var gdiHandles = GetGuiResources(process.Handle, 0); m_handles.Add(gdiHandles); var userHandles = GetGuiResources(process.Handle, 1); m_handles.Add(userHandles); } return new IntPtr[] { m_handles[m_handles.Count - 2], m_handles[m_handles.Count - 1] }; } public static void Close() { for (int i = m_handles.Count - 1; -1 < i; i--) { var handle = m_handles[i]; // release your handle } }
再一次,这只是一个想法。 我以前从来没有遇到过这个问题,所以我不知道它的效果如何,或者是否因某些“我不知道”的原因而失败。
这就是我在逻辑上开始项目的方式。
上述就是C#学习教程:确定GDI句柄和USER对象的数量分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1000754.html