Windows에서 실행할 응용 프로그램의 프로세서 시간과 가상 메모리를 제한 할 수있는 응용 프로그램 러너를 작성 중입니다. 아이디어는 다음과 같은 것입니다 : 나는 C#을에서 모든 것을 할 노력하고있어 이후 작업 개체로 사용자 프로세서 시간 제한 및 가상 메모리 확인
이 mem_limit_in_MB time_limit_in_sec command.exe command_arguments ...
내 조사
윈도우에 Job Objects API를 저를지도하고 runner.exe를 , 나는 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 초 후에 한 번 종료됩니다. 왜 이런 일이 일어나는 걸까요? 작업 개체가 주기적으로 또는 실시간으로 제한을 확인하는 경우 참조를 찾을 수 없습니다.
제 질문은 두 가지입니다. - 누구나 내가 필요한 것을 이미 개발 한 코드에 대해 알고 있습니까? - 작업 객체가 주기적으로 또는 실시간으로 실행되는지 여부를 아는 사람이 있습니까?
내 응용 프로그램이 전체 속도 (한 CPU 코어 전체 시간)로 사용자 모드를 굽고 있으므로 문제가 OS가 한계 검사를 수행하는 빈도에있을 가능성이 큽니다. MSDN에서 수표의 주기성에 대한 진술을 찾아 주셔서 감사합니다. 나는 어떻게 든 그것을 놓쳤다. – mario