मैंने एक .NET 4.5 एप्लिकेशन को लिखा है कि एक Kinect v2 से बफ़र्स का रंग, अवरक्त और गहराई डेटा, उस पर कुछ प्रसंस्करण करता है, और फिर इसे डिस्क से असम्पीडित रूप में डंप करता है; .NET अनुप्रयोग भी सबप्रोसेस के रूप में ffmpeg को शुरू करता है और H.264 के रूप में इनकोड करने के लिए कलर डेटा को पाइप करता है।
क्योंकि मैं एक SSD का उपयोग नहीं कर रहा हूं, वीडियो डेटा डिस्क में लिखने की तुलना में जल्दी आता है। लेकिन यह ठीक है, मेरे लिए यह स्वीकार्य है कि जब मैं RAM पर कम होता हूं तो वीडियो फ्रेम को छोड़ देता हूं। मेरी केवल आवश्यकता यह है कि जो कुछ भी मैं रखता हूं वह ज्यादातर 8-10 से 10 सेकंड के वीडियो के लिए सन्निहित हो। इसलिए मैंने अपने .NET 4.5 एप्लिकेशन में कुछ तर्क जोड़े हैं जब वीडियो फ्रेम को छोड़ना शुरू करना हो तो मेरे पास 8 से 10 सेकंड के वीडियो (लगभग 1.5 से 2 जीबी) के बफर के लिए पर्याप्त रैम नहीं है।
और, पेज थ्रैशिंग को रोकने के लिए, मैंने पूरी तरह से पेजिंग फ़ाइलों को अक्षम कर दिया है। यह मुझे कुल 16 जीबी फिजिकल रैम के साथ छोड़ता है।
मेरी समस्या यह है कि उस तंत्र के साथ भी, कभी-कभी मेरे .NET अनुप्रयोग या ffmpeg उपप्रोसेस तब भी मारे जाते हैं जब Windows 8.1 कम RAM के बारे में पता लगाता है, क्योंकि जाहिर है कि मेरा अनुप्रयोग सबसे अधिक RAM का उपयोग कर रहा है जब उसके पास वीडियो डेटा का एक विशाल बैकलॉग है। डिस्क पर लिखने के लिए। क्या विंडोज को यह बताने का एक तरीका है कि मेरी प्रक्रियाएं दूसरों की तुलना में अधिक महत्वपूर्ण हैं ताकि विंडोज पहले अन्य कम महत्वपूर्ण प्रक्रियाओं को मारना शुरू कर दे?
CreateMemoryResourceNotification
कि यह बहुत कम हैकी है।