gpt4 book ai didi

c# - 使用作业对象限制用户处理器时间和查看虚拟内存

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:33 25 4
gpt4 key购买 nike

我正在 Windows 上编写一个应用程序运行器,它可以限制处理器用户时间和它将运行的应用程序的虚拟内存。想法是有以下内容:

runner.exe mem_limit_in_MB time_limit_in_sec command.exe command_arguments ...

我的调查将我引导至 Windows Job Objects API,因为我试图从 C# 中完成所有这些工作,所以我找到了 JobObjectWrapper帮助我。

代码的主要部分如下:

using (JobObject jo = new JobObject())
{
// Time
jo.Limits.PerProcessUserTimeLimit = TimeSpan.FromMilliseconds(limitTime);
jo.Events.OnEndOfProcessTime += new jobEventHandler<EndOfProcessTimeEventArgs>(Events_OnEndOfProcessTime);

// Memory
jo.Limits.ProcessMemoryLimit = new IntPtr(limitMemory);
jo.Events.OnProcessMemoryLimit += new jobEventHandler<ProcessMemoryLimitEventArgs>(Events_OnProcessMemoryLimit);

// Process
ProcessStartInfo psi = new ProcessStartInfo(command, arguments);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;

jo.Limits.IsChildProcessBreakAway = false;
Process p = jo.CreateProcessSecured(psi);

p.WaitForExit();
}

现在,问题是 Events_OnEndOfProcessTime 没有及时调用。如果我为需要几分钟的应用程序设置 0.5 秒限制,根据运行情况,应用程序会在 0.5 秒后终止,有时会在 4 秒后终止。为什么会这样?如果作业对象定期或实时检查限制,我找不到任何引用。

我的问题有两个:- 有谁知道已经开发的代码可以满足我的需要?- 有谁知道作业对象是定期执行还是实时执行?

提前致谢...

最佳答案

PerProcessUserTimeLimit 指定授予进程的用户模式时间

“系统定期检查以确定与作业关联的每个进程是否累积了超过设置限制的用户模式时间。如果是,则进程终止。” ( MSDN )

因此这取决于您的应用程序,特别是它消耗用户模式时间的效率。在 0.5 秒后以 PerProcessUserTimeLimit = 0.5 结束进程。意味着它在那段时间使用了〜100%的cpu(用户模式)。

...如果作业对象是定期执行还是实时执行?如上所述,定期执行。

关于c# - 使用作业对象限制用户处理器时间和查看虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18511708/

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