अभी, मैंने सोचा कि stackalloc
सही तरीका होगा, लेकिन यह विफल हो जाता है। सबसे महत्वपूर्ण बात यह है कि अब मुझे पता है कि यह असफल होने के लिए बर्बाद हो गया था। ऐसा करने का कोई तरीका नहीं है जो मैं करना चाहता हूं।
यह सवाल restating से देखा जा सकता है:
मैं एक 'असुरक्षित' सरणी के चारों ओर एक कामयाब सरणी कैसे बना सकते हैं?
चूंकि एक प्रबंधित सरणी में हेडर जानकारी है (क्योंकि यह स्मृति की चक के आसपास एक कक्षा है), इसे सरणी की तुलना में स्मृति में अधिक जगह की आवश्यकता होती है। तो, जवाब है:
(और/या बाद में) प्रबंधित एरे के तरीके के आधार पर अंतरिक्ष आवंटित किया जाता है) सरणी स्वयं और प्रबंधित जानकारी (लंबाई, (et cetera)) को 'असुरक्षित' 'सरणी
यह आसानी से संभव नहीं है क्योंकि यह सुनिश्चित करने के लिए कि सरणी के चारों ओर पर्याप्त डेटा सबसे अच्छा है। मेरे विशेष उदाहरण में इसके लिए पर्याप्त जगह हो सकती है क्योंकि एक प्रबंधित बाइट [] का अर्थ है कि सरणी के चारों ओर डेटा है, लेकिन यह दावा करने के लिए कि प्रबंधित डेटा के लिए समान डेटा उपयुक्त है [] सबसे अच्छा है, लेकिन अधिकांश संभवतः ग़लत, और प्रबंधित डबल के लिए इसे उचित बनाने के लिए डेटा को बदलने के लिए [] घृणास्पद है।
[संपादित करें]
यह Marshal.Copy
की तरह दिखता है यहां जाने का रास्ता है। एक नई सरणी बनाएं और मार्शल कॉपी उन्हें (उम्मीद है कि वह मुझे से जल्दी हो जाएगा, या कि शायद कुछ बाद की तारीख में, वह जल्दी हो जाएगा):
var ret = new double[_raw_data.Length/sizeof(double)];
System.Runtime.InteropServices.Marshal.Copy(new System.IntPtr(_pret), ret, 0, ret.Length);
स्रोत
2010-12-01 14:26:58
सामान्य तौर पर जब Interop के साथ काम कर, Marshaller अपने है दोस्त, सिस्टम पर आपकी सेवा पर। रनटाइम.इंटरोप सर्विसेज। मार्शल। मुझे नहीं पता कि विशेष रूप से आपको सरणी का उपयोग करने के लिए क्या चाहिए। हालांकि, आप पॉइंटर अंकगणितीय के साथ सरणी एक्सेस कर सकते हैं। शायद यह आपको सही दिशा में संकेत देता है। – OregonGhost
@daGost - मुझे निश्चित रूप से पॉइंटर्स के साथ सरणी एक्सेस करने के बारे में पता है, लेकिन मुझे एक प्रबंधित सरणी marshalling में देखना होगा। धन्यवाद। –
@ सीमित बात (कृपया मुझे daGhost दोबारा कॉल न करें): यदि आप पॉइंटर्स के साथ सरणी तत्वों तक पहुंच सकते हैं, तो आप मानों को एक प्रबंधित सरणी में कॉपी कर सकते हैं। – OregonGhost