我已经使用作业对象为我的进程配置了内存限制。现在我想取消那个限制。我假设我必须设置JOBOBJECT_EXTENDED_LIMIT_INFORMATION.ProcessMemoryLimit
为特定值并调用SetInformationJobObject
. 我应该使用什么值?这是无证的。
由于更改流程作业分配似乎有问题,因此不可能简单地脱离作业(至少在 Windows 7 上)。
对于上下文,这里有一些我正在使用的 C# 代码,但它似乎对问题无关紧要:
var limitInfo = new NativeMethods.JOBOBJECT_EXTENDED_LIMIT_INFORMATION()
{
BasicLimitInformation = new NativeMethods.JOBOBJECT_BASIC_LIMIT_INFORMATION()
{
LimitFlags = NativeMethods.LimitFlags.JOB_OBJECT_LIMIT_PROCESS_MEMORY,
},
ProcessMemoryLimit = (UIntPtr)maxProcessMemoryBytes,
};
if (!NativeMethods.SetInformationJobObject(jobHandle, NativeMethods.JOBOBJECTINFOCLASS.JobObjectExtendedLimitInformation, (IntPtr)(&limitInfo), (uint)structSize))
throw new Win32Exception();
0
似乎被操作系统拒绝并-1
导致:
-4KB
作为限制。显然没有足够的验证。
首先调用QueryInformationJobObject
以获取当前限制和标志,JOB_OBJECT_LIMIT_PROCESS_MEMORY
从中移除标志JOBOBJECT_EXTENDED_LIMIT_INFORMATION::BasicLimitInformation::LimitFlags
,最后SetInformationJobObject()
使用此数据调用以移除进程内存限制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句