कुछ स्थितियों में MemoryMappedViewAccessor
कक्षा बस इसे बाइट्स को प्रभावी ढंग से पढ़ने के लिए कट नहीं करती है; सबसे अच्छा हमें मिलता है जेनेरिक ReadArray<byte>
जो यह सभी structs के लिए मार्ग है और आपको केवल बाइट्स की आवश्यकता होने पर कई अनावश्यक कदम शामिल हैं।मैं .NET में मेमोरी मैप की गई फ़ाइल से बाइट्स को तुरंत कैसे पढ़ सकता हूं?
MemoryMappedViewStream
का उपयोग करना संभव है, लेकिन क्योंकि यह Stream
पर आधारित है, आपको पहले सही स्थिति की तलाश करनी है, और फिर पढ़ने के ऑपरेशन में कई और अनावश्यक कदम हैं।
क्या .NET में मेमोरी-मैप की गई फ़ाइल से बाइट्स की सरणी पढ़ने के लिए एक त्वरित, उच्च-प्रदर्शन तरीका है, यह देखते हुए कि यह केवल पढ़ने के लिए पता स्थान का एक विशेष क्षेत्र होना चाहिए?
आपको एक गंभीर निष्पादन ब्लॉक का उपयोग करना चाहिए और यह सुनिश्चित करने के लिए प्रयास करना चाहिए कि रिलीज पॉइंटर भी मार्शल के रूप में चलता है। कॉपी एक अपवाद फेंकता है। –
अच्छा उत्तर =) वास्तव में, प्रोफाइलिंग दिखाता है कि प्रबंधित रैपर मैप किए गए मेमोरी तक पहुंचने के लिए एक असुरक्षित पॉइंटर का उपयोग करने से 30x गुना धीमा है। –
@ मैटहोवेल्स मैं सहमत हूं। मैंने पढ़ा है कि सीईआर प्रदर्शन को प्रभावित कर सकता है, लेकिन यह लापरवाही लगता है (कम से कम एक नियंत्रित परीक्षण में)। प्रदर्शन प्रभावों के बावजूद यह "उपयोग" के तहत वर्णित सही उपयोग पैटर्न है; https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safebuffer.acquirepointer(v=vs.110).aspx – LaFleur