所以我发现了一个
article on About.com that tells you how you can manage your apps memory.
这是代码:
procedure TrimAppMemorySize; var MainHandle : THandle; begin try MainHandle := OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID) ; SetProcessWorkingSetSize(MainHandle,$FFFFFFFF,$FFFFFFFF) ; CloseHandle(MainHandle) ; Log('Trimmed Memory Successfull!'); except Log('Failed to trim Memory!'); end; Application.ProcessMessages; end;
我尝试了,工作完美 – 即使我的应用程序在做某事,我点击按钮等,它仍然做它的事情,它的作用就像一个魅力.我看看我的应用程序在资源监视器中的内存使用,就我所见,它的一切都很好.
那么什么抓住?我们都处理内存问题,但解决方案真的那么简单吗?任何人都可以告诉我,如果这样做每隔60秒是坏事吗?
我将重新启动并尝试运行我的程序,并发布我的资源监视器的屏幕截图.
解决方法
是的,这是一件坏事.你告诉操作系统,你知道更多关于内存管理,而不是这样做,这可能不是真的.你正在将所有的非活动内存页面打印到磁盘上.它服从您再次触摸任何内存的那一刻,操作系统就必须将其重新设置为RAM.你迫使磁盘I / O,你实际上不知道你需要的.
如果操作系统需要更多的可用RAM,那么可以确定哪些内存最近没有被使用,并将其翻译出来.这可能来自您的程序,或者可能来自其他程序.但是如果操作系统不需要更多的可用内存空间,那么你刚刚强制一堆没有人要求的磁盘I / O.
如果你有记忆,你知道你不再需要,释放它.不要把它页面到磁盘.如果您有操作系统认为您不需要的内存,它将根据需要自动为您提供页面.
另外,调用Application.ProcessMessages通常是不明智的,除非你知道主线程需要处理的消息,否则它本身不会被处理.当没有别的事情时,应用程序会自动处理消息,所以如果你无关紧要,只需让应用程序自行运行.