- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现了一个 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,它可以找出最近未使用的内存并将其调出。这可能来自您的程序,也可能来自其他程序。但如果操作系统不需要更多的可用RAM,那么您只是强制执行了一堆没人要求的磁盘 I/O。
如果您知道不再需要内存,请释放它。不要只是将其分页到磁盘。如果操作系统认为您不需要内存,它会在需要时自动为您分页。
此外,调用 Application.ProcessMessages
通常是不明智的,除非您知道主线程需要处理一些消息,而主线程本身不会处理这些消息。当无事可做时,应用程序会自动处理消息,因此,如果您无事可做,只需让应用程序自行运行即可。
关于delphi - SetProcessWorkingSetSize - 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6059707/
我发现了一个 article on About.com that tells you how you can manage your apps memory. 这是代码: procedure Trim
有人用过 SetProcessWorkingSetSize 吗?我正在考虑在我的应用程序用完虚拟内存时使用它? 最佳答案 是的。我有一个默认情况下会完全关闭但会继续监听某些事件的应用程序。但是,我当时
我的应用程序中存在内存管理问题。应用程序内存在运行时快速增长。我在断开连接模式下使用数据集。为了解决这个问题,我经常刷新 DS 并使用 SetProcessWorkingSetSize 来管理内存使用
我是一名优秀的程序员,十分优秀!