我编写了一个.NET 4.5应用程序,该程序可以缓冲Kinect v2中的颜色,红外和深度数据,对其进行一些处理,然后以未压缩的形式将其转储到磁盘中。.NET应用程序还将ffmpeg作为子进程启动,并将颜色数据通过管道传递给它,以编码为H.264。
因为我没有使用SSD,所以视频数据的到达速度比我写入磁盘的速度更快。但这没关系,当我的RAM不足时,我可以丢弃视频帧。我唯一的要求是,无论我保持什么,都是连续的8到10秒的视频块。因此,当我没有足够的RAM来缓冲连续8到10秒的视频(大约1.5到2 GB)的视频时,我在.NET 4.5应用程序中添加了一些逻辑以开始丢弃视频帧。
而且,为防止页面抖动,我已完全禁用页面文件。这给我留下了总共16 GB的物理RAM。
我的问题是,即使采用了这种机制,当Windows 8.1内存不足时,有时我的.NET应用程序或ffmpeg子进程仍然会被杀死,因为显然,当我的应用程序具有大量的视频数据积压时,我的应用程序将使用最多的RAM写入磁盘。有没有办法告诉Windows我的进程比其他进程更重要,以便Windows首先开始杀死其他不那么重要的进程?
CreateMemoryResourceNotification
这并不是很多问题。