【问题标题】:Delphi - Minimize & Restore frees up memory?Delphi - 最小化和恢复释放内存?
【发布时间】:2011-03-21 01:04:56
【问题描述】:

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

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

干杯, 戴夫

【问题讨论】:

  • “内存”的定义非常模糊。你看到的是工作集减少。您可能还会发现这篇文章很有用:blog.eurekalog.com/catching-memory-leaks
  • 在你为微软工作足够长的时间后才会变得模糊。

标签: delphi memory restore minimize


【解决方案1】:

可能与 Windows 内存管理有关。用 windows 计算器尝试同样的事情,行为是一样的 :))

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

最好的问候,

【讨论】:

  • 感谢您的回复,我比其他任何事情都更好奇,至少现在我知道这不仅仅是我的应用程序不是唯一这样做的。再次感谢,戴夫
  • 这是一个很好的 Windows 示例,当我弄清楚他们做了什么时,我通常会说:“[在此处插入大声的谴责性声明] 我不敢相信他们会这样做!” Windows 对你来说是一种谎言,因为他们无法弄清楚他们可以告诉你的哪些事情最接近你想知道的事情,比如这个应用程序使用了多少内存。所以他们选择了一件他们知道如何计算的东西,并用一个用户友好但不准确的短标签来标记它; “这就是你要找的”,但显然不是。
【解决方案2】:

this question 上查看 Barry Kelly 的回答。

【讨论】:

    【解决方案3】:

    Here you can find 来自 Ian Martins 的非常清楚的解释。 当应用程序最小化系统调用SetProcessWorkingSetSize 过程以释放进程的非活动内存。

    您也可以将此代码添加到您的应用程序中。在按钮 OnClick 中,您可以这样做:

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

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

    问候

    【讨论】:

    • 如果 Ian Marteens 的非常清楚的解释是用英文解释的,那对我会有帮助...
    • 引用指定链接:“例如,最简单的事情是从计时器运行,例如每分钟”。是的,对。为了你自己,远离这篇文章。
    • @Alexander 请仔细检查并阅读我的评论,看看我建议每分钟释放内存的任何地方。我说:“...如果您的应用程序执行某些任务最终使用了一大块内存,您可以强制它在使用后释放”(1)最终(2)在使用后,而不是每分钟。我已经推荐了它,用于解释和代码。请仔细阅读回复。 P.D:请原谅英语的错误。
    • @Marjan Venema,这篇文章解释了当你最小化一个应用程序时调用的 API;此调用的结果是系统释放应用程序使用的非活动内存。在那篇文章中建议(在某些情况下)可以定期进行此操作;我认为这部分不准确,但在我看来解释清楚正确。
    • SetProcessWorkingSetSize 不释放内存。它告诉操作系统将所有内容分页到磁盘。这是一个直接的性能打击。然后,当您稍后使用这些换出的页面时,您会在它们被分页回 RAM 时再次受到性能影响。一个更好的策略是让所有的事情都不管,让操作系统在需要的时候将它们分页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2023-02-10
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多