我正在开发一个应用程序,它倾向于使用过多的内存,所以我想减少它。
我知道Java程序可以通过在Java程序启动期间添加Maximum heap size
参数(例如java.exe ... -Xmx4g
)来实现,但在这里我正在处理Windows上的可执行文件 - 10系统,所以这不适用。
这篇文章的标题是this URL,它提到了一种方法,但也指出:
最大工作集。表示分配给流程的最大工作量。但是,除非资源管理应用程序为流程配置了硬限制,否则Windows 将忽略此数字。
同时我可以确认以下代码行确实对我的程序的内存使用没有任何影响:
HANDLE h_jobObject = CreateJobObject(NULL, L"Jobobject");
if (!AssignProcessToJobObject(h_jobObject, OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId())))
{
throw "COULD NOT ASSIGN SELF TO JOB OBJECT!:";
}
JOBOBJECT_EXTENDED_LIMIT_INFORMATION tagJobBase = { 0 };
tagJobBase.BasicLimitInformation.MaximumWorkingSetSize = 1; // far too small, just to see what happens
BOOL bSuc = SetInformationJobObject(h_jobObject, JobObjectExtendedLimitInformation, (LPVOID)&tagJobBase, sizeof(tagJobBase));
=> bSuc
是true
,或者还有什么我应该期待的?
除此之外,上述工具(资源管理的应用程序,如Hyper-V)似乎无法在我的Windows-10系统上运行。
接下来,似乎有关于此主题的另一篇文章"Is there any way to force the WorkingSet of a process to be 1GB in C++?",但此处结果似乎也是否定的。
为了更好地理解:我正在使用C ++,因此this URL中提出的解决方案不适用。
所以现在我遇到了一个简单的问题:是否有一种方法可以在C ++中实现,以限制在Windows-10上运行的当前进程的内存使用情况?
有人有想法吗?
提前致谢