如何读取我的程序中其他应用程序使用的内存量?

时间:2013-10-28 23:34:08

标签: c#

让我解释为什么我需要知道,在我的服务器启动器(对于游戏)中,有人要求我添加了“重启内存过多使用”复选框。所以,经过一个小时左右的冒险,我来到了这里。

我只需要知道如何读取正在运行的应用程序的内存使用情况,我可以完成剩下的工作。我只是不知道如何使用c#应用程序执行此操作。

感谢您的帮助!

2 个答案:

答案 0 :(得分:8)

“内存”在像Windows这样的需求分页虚拟内存操作系统上是一个非常不准确的术语。您需要选择一个或多个这些Process类属性:

  • NonpagedSystemMemorySize64:高值表示设备驱动程序在非分页内核内存池中分配了大量内存。此类存储器用于需要在器件产生中断时执行的关键器件驱动器操作。除非你依赖一个有缺陷的司机,否则不是一个很好的措施。杀死这个过程通常不会有所帮助。

  • PagedSystemMemorySize64:从分页内核内存池分配的另一个驱动程序资源。通常用于I / O缓冲区。通常不是一个非常好的措施,获得高价值只表示您的程序正忙。但是,您应该将其与稳定增加的HandleCount属性值相关联。如果这只是继续上升,那么程序中的句柄泄漏确实值得杀死它。

  • VirtualMemorySize64:为进程分配的虚拟内存总量。这包括程序使用的代码和数据,当你在VM地址空间中用完一个足够大的洞时会引发OutOfMemoryException。一般泄漏的一个很好的衡量标准。

  • WorkingSet64:实际映射到RAM的虚拟内存总量。当操作系统取消映射虚拟内存页面以为其他进程腾出空间时,此数字可能会大幅波动。不是一个好的措施,你可能会因为忙碌而杀死这个过程。并且泄漏的程序不需要具有大的工作集,许多页面可以被换出而不会被重新交换,因为程序通常不再引用泄漏的对象。

  • PrivateMemorySize64:未与其他进程共享的虚拟内存量,否则比VirtualMemorySize64更好,因为它代表了为您的进程分配了多少资源。在.NET应用程序中,它将是数据以及不是代码的代码。

  • PagedMemorySize64:页面文件支持的虚拟内存量。如果您正在泄漏数据,那么这是一个很好的衡量标准,这是漏洞.NET应用程序中的正常问题。

当您检查程序的这些数字以找出哪一个是最好的时,您可能会对代码中的错误有很好的引导。内存分析器可以提供很多帮助。修复该错误当然是解决问题的更好方法。

答案 1 :(得分:0)

使用Process对象获取有关正在运行的进程的所有信息。要获取有关正在运行的进程的信息,可以调用静态方法Process.GetProcessByName。这应该给你详细信息,包括内存使用(此调用返回与您的名称匹配的所有进程的数组)。要获取进程当前使用的内存,请使用Process.WorkingSet64属性。 MSDN中引用的链接为您提供了足够的示例来处理Process对象。