Saya menulis aplikasi .NET 4.5 yang mendukung data warna, inframerah, dan kedalaman dari Kinect v2, melakukan beberapa pemrosesan di atasnya, dan kemudian membuangnya ke disk, dalam bentuk yang tidak terkompresi; aplikasi .NET juga memulai ffmpeg sebagai subproses dan mem-pipe data warna untuk disandikan sebagai H.264.
Karena saya tidak menggunakan SSD, data video tiba lebih cepat daripada yang saya bisa tulis ke disk. Tapi tidak apa-apa, saya bisa membuang bingkai video ketika saya kekurangan RAM. Satu-satunya persyaratan saya adalah bahwa apa pun yang saya simpan sebagian besar bersebelahan 8--10 detik video. Jadi saya telah menambahkan beberapa logika dalam aplikasi .NET 4.5 saya untuk mulai membuang bingkai video ketika saya tidak memiliki cukup RAM untuk buffer berdampingan 8 hingga 10 detik video (sekitar 1,5 hingga 2 GB).
Dan, untuk mencegah meronta-ronta halaman, saya telah sepenuhnya menonaktifkan file paging. Ini membuat saya dengan total 16 GB RAM fisik.
Masalah saya adalah bahwa bahkan dengan mekanisme itu di tempat, kadang-kadang aplikasi .NET saya atau subproses ffmpeg masih terbunuh ketika Windows 8.1 panik tentang RAM yang rendah, karena jelas aplikasi saya menggunakan sebagian besar RAM ketika memiliki tumpukan besar data video untuk menulis ke disk. Apakah ada cara untuk memberi tahu Windows bahwa proses saya lebih penting daripada yang lain sehingga Windows akan mulai membunuh proses yang kurang penting lainnya terlebih dahulu?
CreateMemoryResourceNotification
yang jauh lebih sedikit peretasan.