Sha*_*kar 11 windows winapi memory-management process
我的应用程序中存在内存管理问题.应用程序内存在运行时期间快速增长.我在断开连接模式下使用数据集.为了解决这个问题,我经常刷新DS并使用它SetProcessWorkingSetSize
来管理内存使用情况.它在我的开发计算机上运行良好.使用的利弊是SetProcessWorkingSetSize
什么?
Han*_*ant 16
SetProcessWorkingSetSize()控制进程使用的RAM量,否则不会对进程的虚拟内存大小产生任何影响.Windows已经非常擅长动态控制它,当另一个进程需要RAM时,按需交换内存页面.通过手动执行此操作,可以大大减慢程序速度,当Windows被迫重新插入内存页时会导致大量页面错误.SetProcessWorkingSetSize通常用于增加为进程分配的RAM量.或者当应用程序知道它将长时间闲置时强制修剪.当您最小化应用程序的主窗口时,也由旧Windows版本自动完成.
无需使用此btw,您可以使用Process.GetCurrentProcess.Min/MaxWorkingSet属性.
我们发现,对于用 Delphi 为 Win32/Win64 编写的 GUI 应用程序或以类似方式编写的在 Win32 API(GDI 等)之上使用大型和重型库的 GUI 应用程序,值得调用一次 SetProcessWorkingSetSize。
在应用程序完全打开并向用户显示主窗口后的几分之一秒内,我们使用 (... -1, -1) 参数调用它。在这种情况下, SetProcessWorkingSetSize(... -1, -1) 释放了许多似乎不再需要的启动代码。内存快速恢复到没有 SetProcessWorkingSetSize(... -1, -1) 时的 1/3,并且从那时起不会增长更多(除非应用程序分配更多内存)。因此,我们有效地节省了大部分启动代码(加载和解析配置文件、初始化 GUI 等)的 2/3 内存,这些代码在继续运行应用程序时不需要。
如果你有一个 GUI 应用程序,你可以用同样的方式在你自己的应用程序上测试 - 只需调用一次 SetProcessWorkingSetSize 并查看已经明确释放了多少内存。
即使对于没有 GUI 的服务器(服务)应用程序 - 我认为在服务器完全加载和初始化后调用一次 SetProcessWorkingSetSize 可能很有用。
归档时间: |
|
查看次数: |
6703 次 |
最近记录: |