【问题标题】:How to get free physical memory like the one showing in Windows Task Manager如何像 Windows 任务管理器中显示的那样获得可用的物理内存
【发布时间】:2012-05-01 07:28:11
【问题描述】:

我在获取“可用”物理内存时遇到了问题,就像 Windows 任务管理器中显示的那样。无论我在哪里搜索,最终都会得到“可用的”物理内存,这不是我的意图。

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

【问题讨论】:

  • 为什么需要这些信息?你想解决什么问题?
  • 我想检查空闲内存是否低于 1000。如果是,那么我不希望我的程序运行多个进程,而是等到空闲内存高于 1000 :)
  • 嗯,这似乎不是一个好主意。我的计算机中有 16 GB 的 RAM,尽管有 6 到 10 GB 的“可用”内存,但我几乎从未在任务管理器中显示超过 100 MB 的“可用”内存。 Windows 只是为此过于积极地缓存。它有充分的理由这样做——“免费”内存只是被浪费了。为什么不想使用“可用”内存指标?
  • 如果我运行一个优先级低于正常且空闲物理内存为1的进程会发生什么,例如1,用户会遇到该进程导致的任何缺失吗?
  • Read this。如果你需要一个内存,分配它。如果您害怕降低工作站速度并降低这样做的用户体验,请在服务器上运行它。

标签: c# memory


【解决方案1】:

【讨论】:

  • 具体来说,MEMORYSTATUSEX结构的哪些成员包含任务管理器中“Free”值对应的值?还是您建议他完全放弃并使用dwMemoryLoad 成员作为他的标准?
  • 文档示例将ulAvailPhys 成员报告为可用内存量。 MEMORYSTATUSEX 的文档将此成员描述为“当前可用的物理内存量,以字节为单位。这是可以立即重用的物理内存量,而无需先将其内容写入磁盘。它是大小的总和备用列表、空闲列表和零列表。”
  • 我尝试了 pinvoke.net 中的示例,但得到了一些与 Windows 任务管理器中的可用物理内存不匹配的奇怪数字
【解决方案2】:

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

http://www.codinghorror.com/blog/2006/09/why-does-vista-use-all-my-memory.html

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

C# Get used memory in %

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

【讨论】:

  • 这并没有给我可用的物理内存。我尝试使用 GetPerformanceInfo 和 PerformanceCounter,但这些都没有让我获得免费的可用内存。
  • PhysicalTotal - PhysicalAvailable = 免费
  • 我的windows任务管理器里有这些信息:物理内存(MB)总计8103缓存2184可用5775空闲3674,怎么总-可用=免费?
  • 好吧,我不知道如何解释,您从 GetPerformaceInfo 中获取值 PhysicalTotal PhysicalAvailable 并减去它,您是否尝试过我链接的帖子中的代码?
  • 是的,和你之前提到的一样 :) 你提供的链接只给出了可用的结果,总数和使用百分比,但我需要可用的物理内存。如果我使用可用内存,windows 将与虚拟交换,这最终会给具有一些低性能硬件(如 1 或 2 gb ram、双核奔腾处理器等)的计算机带来一些轻微的缺乏经验。如果我能得到可用的物理内存,我可以使用这些数字来确定应用程序是否应该运行,这样它就不会干扰用户使用计算机的体验
猜你喜欢
  • 2015-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2019-07-30
  • 2022-12-04
  • 2015-02-27
  • 2018-10-28
相关资源
最近更新 更多