मेरा आंत प्रतिक्रिया नहीं है, क्योंकि प्रबंधित और अप्रबंधित स्मृति अलग हैं, लेकिन मुझे यकीन नहीं है कि .NET Framework दृश्यों के पीछे मार्शलिंग के साथ कुछ कर रहा है या नहीं।सी # में संरचना संशोधनों में अप्रबंधित स्मृति को प्रभावित करेगा?
मुझे विश्वास है कि क्या होता है: मेरे अप्रबंधित डीएलएल से एक संरचना प्राप्त करते समय, यह कॉल करने के समान होता है जैसे कि कॉल को इंटिप्टर मिल जाता है और फिर इसे प्रबंधित स्मृति में संरचना की प्रतिलिपि बनाने के लिए और मार्शल क्लास का उपयोग करता है (और किए गए परिवर्तन प्रबंधित स्मृति में संरचना के लिए बुलबुला नहीं है)।
मुझे यह एमएसडीएन पर कहीं भी प्रलेखित नहीं लगता है। किसी भी लिंक की सराहना की जाएगी।
[DllImport("mydll.dll", BestFitMapping=false, CharSet=CharSet.Ansi)]
private static extern int GetStruct(ref MyStruct s);
[StructLayout(LayoutKind.Sequential, Pack=0)]
struct MyStruct
{
public int Field1;
public IntPtr Field2;
}
public void DoSomething()
{
MyStruct s = new MyStruct();
GetStruct(ref s);
s.Field1 = 100; //does unmanaged memory now have 100 in Field1 as well?
s.Field2 = IntPtr.Zero; //does unmanaged memory now have a NULL pointer in field Field2 as well?
}
मुझे लगता है कि यह सही जवाब है। तथ्य यह है कि संरचनाओं (या इसके खेतों) में कुछ भी हुक नहीं होता है जब इसके क्षेत्र बदल जाते हैं तो अप्रबंधित स्मृति में परिवर्तन करने के लिए यह निष्कर्ष निकाला जाता है। – userx