delphi – SetProcessWorkingSetSize – 什么是catch?

前端之家收集整理的这篇文章主要介绍了delphi – SetProcessWorkingSetSize – 什么是catch?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我发现了一个 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通常是不明智的,除非你知道主线程需要处理的消息,否则它本身不会被处理.当没有别的事情时,应用程序会自动处理消息,所以如果你无关紧要,只需让应用程序自行运行.

原文链接:https://www.f2er.com/delphi/102783.html

猜你在找的Delphi相关文章