Bir Kinect v2'den renk, kızılötesi ve derinlik verilerini arabelleğe alan, üzerinde bazı işlemler yapan ve sıkıştırılmamış biçimde diske döken bir .NET 4.5 uygulaması yazdım; .NET uygulaması da ffmpeg'i bir alt işlem olarak başlatır ve renk verilerini H.264 olarak kodlanacak şekilde aktarır.
SSD kullanmadığım için video verileri diske yazabileceğimden daha hızlı geliyor. Ama sorun değil, RAM azaldığında video karelerini atmak benim için kabul edilebilir. Tek şartım, tuttuğum her şeyin çoğunlukla 8-10 saniyelik video parçaları olması. Bu nedenle, bitişik 8 ila 10 saniyelik videoyu (kabaca 1,5 ila 2 GB) arabelleğe almak için yeterli RAM'e sahip olmadığımda .NET 4.5 uygulamamda video karelerini atmaya başlamak için bazı mantık ekledim.
Sayfanın bozulmasını önlemek için disk belleği dosyalarını tamamen devre dışı bıraktım. Bu bana toplam 16 GB fiziksel RAM bırakıyor.
Benim sorunum, bu mekanizma yerinde olsa bile, Windows 8.1 düşük RAM'den korktuğu zaman bazen .NET uygulamam veya ffmpeg alt işleminin hala öldürülmesidir, çünkü açıkçası benim uygulama video verilerinin büyük bir birikimine sahip olduğunda en fazla RAM kullanıyor diske yazmak. Windows'a süreçlerimin diğerlerinden daha önemli olduğunu söylemenin bir yolu var mı?
CreateMemoryResourceNotification
çok daha az hacky işaret edebilir.