有个程序,刚打开运行时占内存140M左右,手动把前面板最小化就会降至20M左右,把前面板还原显示后内存会逐渐升到60M左右,而如果我在程序里添加 一个指令,就是按一个按钮让前面板最小化(通过前面板状态属性节点),内存却不会变化,这是为什么呢?下面大概讲下我的程序内容:
1、通过TCP从服务器读取不同设备的当前运行数据
2、在主VI前面板放置一个子面板,通过按钮切换查看不同设备的运行状态(每个设备的状态数据做成一个子VI,显示内容包括XCONTROL、表格、指示灯)
Windows操作系统为运行的进程分配随机存取存储器(RAM),被分配给进程的物理RAM叫做工作区,访问工作区的数据是相当快的。如果一个进程需要使用的内存大小超过操作系统分配给他的大小,它可以使用硬盘作为虚拟内存。为了能够使用虚拟内存里的数据,操作系统必须把数据从虚拟内存传到RAM中,这个过程叫做内存分页。访问工作区的数据是极其快的,而访问虚拟内存的数据要相对慢一些,这是因为磁盘操作要慢于RAM操作,由于内存分页花费了额外的时间。 当一个应用程序最小化了它的顶层窗口,操作系统减少分配给它的工作区大小,释放RAM来给前台进程使用。如果一个最小化的程序需要经常性地访问虚拟内存,那么它的性能将会受到一定的影响。你可以通过以下这个链接来了解这个具体的执行过程 Microsoft KnowledgeBase 293215: The working set of an application is trimmed when its top-level window is minimized. 这是一个预期的行为,它不是LabVIEW的功能而是Windows的功能。在其它的应用程序上也会有类似的表现,例如Word或是计算器。当把相同的程序最大化以后,你会发现分配给它的内存并没有恢复到原来的大小,这是因为在开始启动一个应用程序的时候,Windows会分配一个超过所需大小的内存给应用程序,但是当一个最小化的程序被重新最大化以后,Windows会给它分配一个更合理大小的内存。如果由于某种原因这个过程发生问题,微软KB解释了在程序最小化的时候,如何来避免工作区被修改。你可以通过修改Background Services 中的处理器调度选项来修改这一行为,在 Control Panel»System»Advanced»Performance»Advanced»Processor Scheduling。 备注: 改变处理器调度可能会改变系统的性能