Kinect v2의 색상, 적외선 및 깊이 데이터를 버퍼링하고 일부 처리를 수행 한 다음 압축되지 않은 형태로 디스크에 덤프하는 .NET 4.5 응용 프로그램을 작성했습니다. .NET 응용 프로그램은 하위 프로세스로 ffmpeg를 시작하고 H.264로 인코딩되도록 색상 데이터를 파이프합니다.
SSD를 사용하지 않기 때문에 비디오 데이터가 디스크에 쓸 수있는 것보다 빨리 도착합니다. 그러나 괜찮습니다 .RAM이 적을 때 비디오 프레임을 버리는 것이 허용됩니다. 내 유일한 요구 사항은 내가 유지하는 모든 것이 8-10 초의 비디오 청크에 인접해야한다는 것입니다. 따라서 8 ~ 10 초의 비디오 (약 1.5 ~ 2GB)를 버퍼링하기에 충분한 RAM이 없을 때 비디오 프레임을 삭제하기 위해 .NET 4.5 응용 프로그램에 몇 가지 논리를 추가했습니다.
그리고 페이지 스 래싱을 방지하기 위해 페이징 파일을 완전히 비활성화했습니다. 이로 인해 총 16GB의 실제 RAM이 남습니다.
내 문제는 해당 메커니즘을 사용하더라도 Windows 8.1에서 RAM이 부족하다는 사실을 알면 때로는 .NET 응용 프로그램 또는 ffmpeg 하위 프로세스가 여전히 종료되는 것입니다. 디스크에 쓸 수 있습니다. Windows가 중요하지 않은 프로세스를 먼저 종료하기 위해 내 프로세스가 다른 프로세스보다 중요하다는 것을 Windows에 알리는 방법이 있습니까?
CreateMemoryResourceNotification
덜 해킹 된 것을 지적 할 수 있습니다 .