加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – SetProcessWorkingSetSize – 什么是catch?

发布时间:2020-12-15 10:08:20 所属栏目:大数据 来源:网络整理
导读:所以我发现了一个 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) ; S
所以我发现了一个 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通常是不明智的,除非你知道主线程需要处理的消息,否则它本身不会被处理.当没有别的事情时,应用程序会自动处理消息,所以如果你无关紧要,只需让应用程序自行运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读