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

C# 如何读取程序中其他应用程序使用的内存量?,c#,C#,为了让我解释为什么我需要知道,在我的服务器启动器(用于游戏)中,有人要求我添加一个“在内存过度使用时重新启动”复选框。所以,经过一个小时左右的冒险,我来到了这里 我只需要知道如何读取正在运行的应用程序的内存使用情况,其余的我就可以做了。我只是不知道如何使用c#应用程序来实现这一点 谢谢你的帮助 使用Process对象获取有关正在运行的流程的所有信息。要获取有关正在运行的进程的信息,可以调用静态方法。这将为您提供包括内存使用在内的详细信息(此调用返回与您的名称匹配的所有进程的数组)。要获取进程当前

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

我只需要知道如何读取正在运行的应用程序的内存使用情况,其余的我就可以做了。我只是不知道如何使用c#应用程序来实现这一点


谢谢你的帮助

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

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

对于Windows这样的按需分页虚拟内存操作系统,“内存”是一个非常不准确的术语。您需要选择以下一个或多个流程类属性:

  • NonpagedSystemMemorySize64:高值表示设备驱动程序在非分页内核内存池中分配了大量内存。这种内存用于在设备产生中断时需要执行的关键设备驱动程序操作。这不是一个很好的衡量标准,除非你依靠一个马车司机。终止进程通常不会有帮助

  • PagedSystemMemorySize64:另一个驱动程序资源,从分页内核内存池分配。通常用于I/O缓冲区。这通常不是一个很好的衡量标准,获得一个高值只是表明您的程序正忙。然而,您应该将其与稳步增长的HandleCount属性值相关联。如果这只是继续上升,那么你有一个句柄泄漏的程序,值得杀死它

  • VirtualMemorySize64:为进程分配的虚拟内存总量。这涵盖了程序使用的代码和数据,当您用完VM地址空间中足够大的洞时,会引发OutOfMemoryException。对于一般泄漏来说,这是一个很好的测量方法

  • WorkingSet64:实际映射到RAM的虚拟内存总量。当操作系统取消映射虚拟内存页以为其他进程腾出空间时,这个数字可能会大幅波动。这不是一个很好的措施,您可能会因为进程繁忙而终止它。而且一个泄漏的程序不需要有一个大的工作集,许多页面可以被调出而不能被调回,因为程序通常不再引用泄漏的对象

  • PrivateMorysize64:不与其他进程共享的虚拟内存量,因为它代表仅为您的进程分配的资源量,因此是比VirtualMemorySize64更好的度量方法。在.NET应用程序中,该应用程序将包含非ngen-ed的数据和代码

  • PagedMemorySize64:分页文件支持的虚拟内存量。如果你正在泄漏数据,这是一个很好的测量方法,这是一个有漏洞的.NET应用程序的正常问题

当你为你的程序检查这些数字以找出哪一个是最好的时,你也很有可能找到代码中错误的线索。内存分析器可以提供很多帮助。修复该漏洞当然是解决问题的更好办法。

“内存”在Windows这样的按需分页虚拟内存操作系统中是一个相当不准确的术语。您需要选择以下一个或多个流程类属性:

  • NonpagedSystemMemorySize64:高值表示设备驱动程序在非分页内核内存池中分配了大量内存。这种内存用于在设备产生中断时需要执行的关键设备驱动程序操作。这不是一个很好的衡量标准,除非你依靠一个马车司机。终止进程通常不会有帮助

  • PagedSystemMemorySize64:另一个驱动程序资源,从分页内核内存池分配。通常用于I/O缓冲区。这通常不是一个很好的衡量标准,获得一个高值只是表明您的程序正忙。然而,您应该将其与稳步增长的HandleCount属性值相关联。如果这只是继续上升,那么你有一个句柄泄漏的程序,值得杀死它

  • VirtualMemorySize64:为进程分配的虚拟内存总量。这涵盖了程序使用的代码和数据,当您用完VM地址空间中足够大的洞时,会引发OutOfMemoryException。对于一般泄漏来说,这是一个很好的测量方法

  • WorkingSet64:实际映射到RAM的虚拟内存总量。当操作系统取消映射虚拟内存页以为其他进程腾出空间时,这个数字可能会大幅波动。这不是一个很好的措施,您可能会因为进程繁忙而终止它。而且一个泄漏的程序不需要有一个大的工作集,许多页面可以被调出而不能被调回,因为程序通常不再引用泄漏的对象

  • PrivateMorysize64:不与其他进程共享的虚拟内存量,因为它代表仅为您的进程分配的资源量,因此是比VirtualMemorySize64更好的度量方法。在.NET应用程序中,该应用程序将包含非ngen-ed的数据和代码

  • PagedMemorySize64:t支持的虚拟内存量