gpt4 book ai didi

delphi - SetProcessWorkingSetSize - 有什么问题?

转载 作者:行者123 更新时间:2023-12-03 14:36:10 35 4
gpt4 key购买 nike

我发现了一个 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com