如何查看特定进程以了解它在运行时使用的资源(例如声音,图片,游标和注册表项)?
我必须使用C#以编程方式执行 (例如,使用Windows API或任何第三方库)。
感谢任何帮助。感谢。
答案 0 :(得分:3)
我会坚持表演专柜。
有使用性能计数器无法确定确切的类型,但如果您泄漏某些东西,它可以给您一个提示。如果你想知道哪些句柄你可以使用SysInternals的句柄,它会给你一个很好的每个进程输出你可以解析。
如果你想修复句柄泄漏,那么你需要使用一个调试器(Windbbg)并使用!handle扩展来开始跟踪每个句柄的所有获取/释放调用堆栈,这样你就可以得到一个统计数据来处理已经分配但尚未释放。
你的问题有点广泛,因为确定资源泄漏的确切策略取决于泄漏的性质。 EasyHook是一个很好的解决方案,可以跟踪所有资源获取/释放呼叫并自动记录。
如果您想使用例如自动化调试器C#你可以使用http://wmemoryprofiler.codeplex.com/,它基本上是围绕Windbg的托管包装器,它甚至允许你自己调试你的应用程序。
当您只想学习如何掌握各种资源的分散数据的原则时,您应该阅读Process Hacker的代码。
答案 1 :(得分:1)
您想要GDI对象还是Win32句柄?
可以使用NtQuerySystemInformation
WinAPI函数获取Win32句柄。您可以在这些ProcessHacker源中找到与句柄相关的任务的C#代码:http://sourceforge.net/p/processhacker/code/HEAD/tree/1.x/trunk/ProcessHacker.Native/Windows.cs
答案 2 :(得分:1)
EasyHook将允许您拦截Windows API调用。这是进程所有文件访问的simple example。注册表调用also seem to be supported。