如何获得桌面堆免费大小?

时间:2009-09-14 15:16:30

标签: c#

我试图在网上找到它一个星期但一无所获。 我想知道剩下的桌面堆免费大小是多少。 api也很好 我无法安装桌面堆监视器。 谢谢

2 个答案:

答案 0 :(得分:1)

我不知道知道桌面堆有多少是免费的。来自On the unanswerability of the maximum number of user interface objects a program can create

  

虽然可以想出一个   理论最大窗口数   可以放在桌面上的类   堆,这个数字是无法实现的   练习,因为桌面堆是   与所有其他用户界面共享   桌面上的对象。

重点是,在任何给定时间,知道免费桌面堆的数量不会给你任何关于你可以创建多少对象的指示。

  

通常情况下,有人问这个问题   问题,真正的问题是   他们设计了一个系统   桌面堆耗尽的地方   成为一个问题,他们需要   重新设计程序,所以他们不是这样   浪费了桌面堆资源   一般

理想情况下,您不需要知道自己有多少免费桌面堆。如果这是一个问题,您可能应该考虑重新设计您的应用程序。换句话说The "Error creating window handle" exception and the Desktop Heap也是这样说的:

  

增加桌面堆是一个   有效的解决方案,但那不是   终极的。真正的解决方案是   消耗更少的资源...

并提供了如何重新设计应用程序的示例:

  • 使用TabControls并在每个标签变为可见时动态创建每个标签的内容;
  • 使用可扩展/可折叠区域,并仅在需要时再次使用控件和数据填充它们;
  • 尽快释放资源(使用Dispose方法)。当某个区域折叠时,可以清除它的子控件。选项卡隐藏时相同;
  • 使用MVP设计模式,这有助于实现上述目标,因为它将数据与视图分开;
  • 使用布局引擎,标准的FlowLayoutPanel和TableLayoutPanel,或者自定义的,而不是创建嵌套面板,GroupBoxes和Splitters的深层次结构(空的拆分器本身会占用三个窗口句柄......)。

答案 1 :(得分:0)

剩下的堆空间量实际上不是一个有趣的数字。堆空间受应用程序可以处理的内存量或系统的虚拟内存大小的限制,这是首先出现的。

如果您接近填充虚拟内存大小,系统已经将其中的一半交换到磁盘,那么此时您的系统会进行太多的磁盘交换。

我不知道你想知道关于内存使用情况的确切内容,但剩下的堆空间量很可能不会告诉你任何有用的内容。