无论如何我可以让我的应用程序告诉用户有多少内存,以及应用程序是否接近占用了很高的百分比。
另外,您如何知道机器为操作系统,视频卡等提供了多少内存。
例如,如果你有4GB的内存,给应用程序多少实际内存,你可以配置它。
答案 0 :(得分:2)
无论如何我可以让我的应用程序告诉用户有多少内存,以及应用程序是否接近占用了很高的百分比。
是的,这是可能的(请参阅其他一些答案),但您的应用程序确实不太可能需要关注。你认为自己需要对记忆压力敏感的是什么?
另外,您如何知道机器为操作系统,视频卡等提供了多少内存。
同样,这个应该可以使用WMI调用,但更大的问题是为什么你需要这样做?
例如,如果你有4GB的内存,给应用程序多少实际内存,你可以配置它。
不,这不是可配置的值。当.NET应用程序启动时,操作系统会为其分配一块内存供其使用。这由OS处理,无法配置用于确定要分配的内存量的算法。同样,没有办法配置.NET运行时用于托管堆,堆栈,大对象堆等的内存量。
答案 1 :(得分:2)
我认为我对这个问题的看法略有不同,所以希望这个回答不是太偏离主题!
通过使用Windows任务管理器,甚至更好的Sysinternals Process Monitor,您可以很好地了解应用程序消耗的内存量。这是一种快速查看流程峰值的方法,以了解它们的行为方式。
开箱即用,x86进程只能处理2GB内存。这意味着您机器上的任何单个进程最多只能消耗2GB。实际上,在内存异常出现之前,您可能只能消耗1.5-1.8。
您的Windows副本实际可以解决的内存量取决于Windows版本和CPU体系结构。
使用4GB RAM的示例,操作系统将为您的应用程序提供最多2GB的RAM(所有进程共享),并为自己保留2GB。
根据您运行的操作系统,您可以调整它,使用boot.ini中的/ 3GB开关,将该比率调整为3GB(对于应用程序)和1GB(对于OS)。这对操作系统有一些影响,所以我先审查一下这种影响,看看你是否可以接受权衡(YMMV)。
对于单个应用程序能够处理大于/ 3GB的内容,您需要在PE映像头中设置特定位。这个question/answer已有关于此主题的良好信息。
游戏在x64架构下发生了变化。 :)
一些很好的参考信息:
答案 2 :(得分:0)
我认为您可以使用WMI获取所有信息
答案 3 :(得分:0)
如果您不想使用WMI,可以使用GlobalMemoryStatusEx():
功能调用:
http://www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html
返回数据:
http://www.pinvoke.net/default.aspx/Structures/MEMORYSTATUSEX.html
MemoryLoad将为您提供0到100之间的数字,表示正在使用的物理内存的百分比,TotalPhys将告诉您总物理内存总量(以字节为单位)。
内存很棘手,因为可用内存是物理(ram)和虚拟(页面文件)类型的混合。特定的混合,以及在哪里,由操作系统决定。幸运的是,这有点可配置,因为Windows允许您规定要使用多少虚拟内存,如果有的话。
请注意,并非32位Windows(XP和Vista)中的所有内存都可以使用。 Windows可能会报告最多安装4GB,但操作系统和应用程序实际使用的只有3.1-3.2GB。这与传统寻址问题IIRC有关。
祝你好运