Delphi - 最小化和最小化恢复可以释放内存吗?

发布于 2024-09-11 13:43:35 字数 327 浏览 10 评论 0原文

多年来我断断续续地涉足delphi,我一直想知道为什么最小化和恢复应用程序会导致它使用更少的内存?

作为一个例子,我使用delphi 7,我创建了一个新项目,上面没有任何内容,但所有项目都以空白形式开始,然后我按F9运行应用程序,然后查看应用程序的内存使用情况,它位于大约 3.5mb 然后我最小化应用程序,内存使用量下降到大约 760kb,然后我最终恢复应用程序,内存使用量回到大约 1.5mb,大约是第一次加载时的 1/2,这一直让我困惑,不知道是什么原因导致这种情况发生,更重要的是,无论如何都要使用一些指令来启动应用程序,使其使用 1.5mb 内存,而不是通常使用的 3.5mb 内存。

干杯, 戴夫

I have been a dabbling into delphi off and on for years and I have always wondered why does minimizing and restoring an application cause it to use less memory ?

As an example I am using delphi 7 and I create a new project with nothing on it but the blank form all projects start out with and then I press F9 to run the application and then look at the memory usage for the app and it's sitting at around 3.5mb I then minimize the app and the memory usage goes down to around 760kb and then I finally restore the app and the memory usage goes back up to around 1.5mb which is roughly 1/2 of what it was when it first loaded and this has always confused me as to what is making this happen and even more to the point is there anyway to start the application with some directive that makes it use the 1.5mb of memory instead of the 3.5mb it normally uses.

Cheers,
Dave

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

请爱~陌生人 2024-09-18 13:43:35

可能是windows内存管理的问题。使用 Windows 计算器尝试相同的操作,行为是相同的:))

这里有一个答案:http: //support.microsoft.com/?kbid=293215
有些人有同样的问题:http://digital.ni.com/public。 nsf/allkb/9EA3D4258E037B8A8625763300434D4D

致以诚挚的问候,

probably is something with windows memory management. try the same thing with the windows calculator and the behavior is the same :))

here an answer: http://support.microsoft.com/?kbid=293215
and some folks have the same question: http://digital.ni.com/public.nsf/allkb/9EA3D4258E037B8A8625763300434D4D

best regards,

长发绾君心 2024-09-18 13:43:35

在这里您可以找到来自 Ian Martins 的非常清晰的解释。
当应用程序最小化系统调用时 SetProcessWorkingSetSize释放进程非活动内存的过程。

您可以执行相同的操作,将此代码添加到您的应用程序中。在按钮 OnClick 中您可以执行以下操作:

procedure LiberarMemoria;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;

效果类似于最小化应用程序。
如果您的应用程序执行某些任务最终使用大内存块,您可以使用这段小代码强制它在使用后释放。

问候

Here you can find a very clear explanation from Ian Martins.
When the application minimizes the system call SetProcessWorkingSetSize procedure for free inactive memory of process.

You can do the same adding this code to your application. In a button OnClick you can do this:

procedure LiberarMemoria;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;

The effect is similar to minimize the application.
If your application do some task thah eventually use a big block of memory, you can force it to free after use it, using this small code.

Regards

厌倦 2024-09-18 13:43:35

请参阅 Barry Kelly 对此问题的回答。

See Barry Kelly's answer on this question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文