观察exe \ dll使用的资源

时间:2013-02-09 07:25:45

标签: c# windows resources runtime

如何查看特定进程以了解它在运行时使用的资源(例如声音,图片,游标和注册表项)?

我必须使用C#以编程方式执行 (例如,使用Windows API或任何第三方库)。

感谢任何帮助。感谢。

3 个答案:

答案 0 :(得分:3)

我会坚持表演专柜。

  • 内存
  • GDI句柄(位图,字体,...)
  • 句柄(文件,注册表项,事件,互斥锁,套接字,进程,...)
  • Windows(用户对象)

使用性能计数器无法确定确切的类型,但如果您泄漏某些东西,它可以给您一个提示。如果你想知道哪些句柄你可以使用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