delphi – 何时调用SetProcessWorkingSetSize? (说服内存管理器
在上一篇文章(
My program never releases the memory back. Why?)中,我展示了FastMM可以缓存(读取为自身保持)相当大的内存.如果您的应用程序刚刚在RAM中加载了大量数据集,则在释放数据后,您将看到令人印象深刻的RAM未释放回内存池.
我环顾四周,似乎调用SetProcessWorkingSetSize API函数会将缓存“刷新”到磁盘.但是,我无法决定何时调用此函数.我想在执行RAM密集型操作的按钮上的OnClick事件结束时调用它.但是,有些人说这可能会导致AV. 如果有人成功使用此功能,请告诉我(我们). 非常感谢. 编辑: 解决方法
如果SetProcessWorkingSetSize可以解决您的问题,那么您的问题不是FastMM保持内存.由于此函数只是通过将RAM中的内存写入页面文件来修剪应用程序的工作集.什么都没有发布回Windows.
事实上,你只是再次访问内存的速度较慢,因为它现在必须从光盘中读取.此方法与最小化应用程序具有相同的效果.然后Windows假定您不会很快再次使用该应用程序,并将工作集写入RAM页面文件. Windows可以很好地决定何时将RAM写入页面文件,并尝试尽可能长时间地将最常用的内存保留在RAM中.当剩余的RAM很少时,它将使工作集大小更小(写入页面文件).我不会惹它只是为了给你一个错觉,你编程使用更少的内存,而事实上它正在使用与以前一样多,只是现在它访问速度较慢.再次访问的内存将再次加载到RAM中,并使工作集大小再次增长.触摸更少的内存可以减小工作集的大小. 所以不,这不会帮助你强迫FastMM释放内存.如果你的目标是让你的应用程序使用更少的内存,你应该寻找其他地方.寻找泄漏,寻找堆碎片寻找优化,如果你认为FastMM阻止你这样做,你应该尝试找到支持它的事实.如果你的目标是保持你的工作集大小,你可以尝试让你的内存访问本地.也许FastMM或其他内存管理器可以帮助你,但与使用大量内存相比,这是一个非常不同的问题.也许这个函数可以帮助你解决你遇到的问题,但我会小心使用它,当然不会只是为了保持你的程序内存使用率低的错觉. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |