繁体   English   中英

Winforms应用程序内存使用情况

[英]winforms application memory usage

无论如何,我可以让我的应用程序告诉用户多少内存,以及应用程序是否接近占用大量内存。

另外,您如何知道机器为操作系统,视频卡等提供了多少内存。

例如,如果您有4GB的内存,那么为应用程序分配了多少实际内存,您可以配置它吗?

无论如何,我可以让我的应用程序告诉用户多少内存,以及应用程序是否接近占用大量内存。

是的,这是有可能的(请参阅其他一些答案),但是您的应用程序真正需要关心的可能性很小。 您认为需要对内存压力如此敏感的地方正在做什么?

另外,您如何知道机器为操作系统,视频卡等提供了多少内存。

同样,使用WMI调用应该可以实现这一点,但是更大的问题是为什么您需要这样做?

例如,如果您有4GB的内存,那么为应用程序分配了多少实际内存,您可以配置它吗?

不,这不是可配置的值。 .NET应用程序启动时,操作系统会分配一块内存供其使用。 这是由操作系统处理的,无法配置用于确定要分配的内存量的算法。 同样,也无法配置.NET运行时用于托管堆,堆栈,大对象堆等的内存量。

我想我对问题的理解有所不同,所以希望这个回答不会太离题!

通过使用Windows任务管理器甚至更好的Sysinternals Process Monitor ,您可以很好地了解应用程序消耗了多少内存。 这是一种快速查看过程高峰的快速方法,以查看其行为方式。

开箱即用的x86进程只能访问2GB的RAM。 这意味着计算机上的任何单个进程最多只能消耗2GB。 实际上,在摆脱内存异常之前,您可能只能消耗1.5-1.8。

Windows副本可以实际寻址多少RAM取决于Windows版本和cpu体系结构。

以您的4GB RAM为例,操作系统将为您的应用程序提供高达2GB的RAM可供播放(所有进程共享),并且它将为自己保留2GB。

根据所运行的操作系统,您可以使用boot.ini中的/ 3GB开关进行调整,以将比例调整为3GB(对于应用程序)和1GB(对于OS)。 这会对操作系统产生一定的影响,因此,我将首先回顾一下这种影响,看看是否可以进行权衡(YMMV)。

为了使单个应用程序能够处理大于/ 3GB的空间,您将需要在PE映像头中设置特定的位。 这个问题/答案已经对此主题提供了很好的信息。

游戏在x64体系结构下进行了更改。 :)

一些很好的参考信息:

Windows版本的内存限制

虚拟地址空间

我认为您可以使用WMI来获取所有信息

如果您不想使用WMI,则可以使用GlobalMemoryStatusEx():

函数调用:
http://www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html

返回数据:
http://www.pinvoke.net/default.aspx/Structures/MEMORYSTATUSEX.html

MemoryLoad将为您提供0到100之间的数字,代表正在使用的物理内存的〜百分比,TotalPhys将告诉您物理内存的总量(以字节为单位)。

内存比较棘手,因为可用内存是物理(内存)和虚拟(页面文件)类型的混合。 具体的混合以及去向何处,由操作系统决定。 幸运的是,由于Windows允许您指定要使用的虚拟内存量(如果有),因此它在某种程度上是可配置的。

请注意,并非32位Windows(XP和Vista)中的所有内存都可以使用。 Windows可能报告最多已安装4GB,但是只有3.1-3.2GB可供操作系统和应用程序实际使用。 这与IIRC的遗留解决问题有关。

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM