C# 如何获得Windows任务管理器中显示的可用物理内存

C# 如何获得Windows任务管理器中显示的可用物理内存,c#,memory,C#,Memory,我无法获得Windows任务管理器中显示的“可用”物理内存。无论我在哪里搜索,我最终都会得到“可用”的物理内存,这不是我的本意 有人知道如何获得“空闲”物理内存吗?您可能需要该功能。有关从C#使用它的示例,请参见 你可能也会觉得有用。我完全忽略了你需要的是空闲内存,而不是可用内存,所以我的答案是错误的,对不起。但这个数字并不意味着什么,因为用于缓存的内存将减少,请参阅windows vista 7内存管理器的工作原理: 您可以使用GetPerformanceInfo windows API,它

我无法获得Windows任务管理器中显示的“可用”物理内存。无论我在哪里搜索,我最终都会得到“可用”的物理内存,这不是我的本意

有人知道如何获得“空闲”物理内存吗?

您可能需要该功能。有关从C#使用它的示例,请参见


你可能也会觉得有用。

我完全忽略了你需要的是空闲内存,而不是可用内存,所以我的答案是错误的,对不起。但这个数字并不意味着什么,因为用于缓存的内存将减少,请参阅windows vista 7内存管理器的工作原理:

您可以使用GetPerformanceInfo windows API,它显示的值与windows 7上的windows任务管理器显示的值完全相同,请查看我对类似问题的SO回答:

或者下载源代码,这是一个显示空闲内存和CPU使用率的小软件,它是开源的,完全免费的,我应该说是我写的:)


您为什么需要这些信息?你想解决什么问题?我想检查一下可用内存是否低于1000。如果是,那么我不希望我的程序运行几个进程,而是等到可用内存超过1000:)嗯,这似乎不是个好主意。我的计算机中有16 GB的RAM,我几乎从来没有在任务管理器中显示超过100 MB的“空闲”内存,尽管有6到10 GB的“可用”内存。Windows的缓存速度太快了。它有充分的理由这么做——“空闲”内存只是浪费。为什么不想使用“可用”内存指标?如果我运行的进程优先级低于正常值,那么会发生什么情况?例如,可用物理内存为1,用户是否会体验到该进程导致的任何内存不足?。如果你需要一个内存,分配它。如果您害怕减慢工作站速度并降低用户体验,请在服务器上运行它。具体来说,
memorystaturex
结构的哪个成员包含与任务管理器中的“Free”值相对应的值?或者,您是否建议他将其全部删除,并使用
dwMemoryLoad
成员作为他的度量标准?文档示例将
ulAvailPhys
成员报告为可用内存量。
memorystaturex
的文档将此成员描述为“当前可用的物理内存量,以字节为单位。这是无需先将其内容写入磁盘即可立即重用的物理内存量。它是备用、可用和零列表的大小之和。”我尝试了pinvoke.net中的示例,但得到了一些奇怪的数字,这些数字与windows任务管理器中的可用物理内存不匹配,而windows任务管理器没有提供可用物理内存。我尝试过使用GetPerformanceInfo和PerformanceCounter,但没有一个可以让我获得免费的memomry.PhysicalTotal-PhysicalAvailable=free我在windows任务管理器中有这些信息:物理内存(MB)总计8103缓存2184可用5775免费3674,如何才能获得免费的memomry.PhysicalTotal-PhysicalAvailable=free?我不知道如何解释,你从GetPerformanceInfo中得到PhysicalTotal PhysicalAvailable值,然后减去它,你试过我链接的那篇文章中的代码吗?是的,得到的和你前面提到的一样:)你提供的链接只给出了可用的、总的和使用百分比的结果,但我需要可用的物理内存。如果我使用可用的内存,windows将与虚拟机交换,这将导致在使用一些低性能硬件(如1或2 gb ram、双核奔腾处理器等)的计算机时出现一些轻微的经验不足。如果我可以获得可用的物理内存,我可以使用这些数字来确定应用程序是否应该运行,这样就不会干扰用户对计算机的体验