मेरे पास ऑब्जेक्ट्स का संग्रह है और मैं इस संग्रह को क्लोन करने और विभिन्न दृष्टिकोणों के प्रदर्शन निहितार्थ को समझने की कोशिश कर रहा हूं।डीपक्लोन का प्रदर्शन (बाइनरी सीरियलाइजेशन का उपयोग करके) मैन्युअल रूप से गुणों को सेट करना
संग्रह में ऑब्जेक्ट में लगभग 20 गुण हैं, सभी तार, इंट्स, फ्लोट्स (इस ऑब्जेक्ट में इसके अंदर कोई नेस्टेड ऑब्जेक्ट नहीं है)। दो दृष्टिकोण हैं:
DeepClone() विधि बनाएं:
public static class ExtensionMethods { public static T DeepClone<T>(this T a) { using (var stream = new MemoryStream()) { var formatter = new BinaryFormatter(); formatter.Serialize(stream, a); stream.Position = 0; return (T)formatter.Deserialize(stream); } }
}
मैन्युअल बारे में "कॉपी" कोड जहां मैं संग्रह के माध्यम से पाशन कर रहा हूँ और 'नई' एक ing नई वस्तु और फिर मैन्युअल रूप से सभी 20 गुणों को सेट करना। इस
public MyObject Copy(MyObject myObj) { var obj = new MyObject(); obj.Prop1 = myObj.Prop1; obj.Prop2 = myObj.Prop2; return obj;
}
की तरह कुछ मैं बहुत असंगत परिणाम हो रही है तो मैं पर लोगों प्रतिक्रिया प्राप्त करना चाहता था:
एक बहुत तेजी से अन्य है कि हो सकता है? मैंने दो विकल्प सोचा होगा लेकिन मेरे परीक्षण इस तरह का समर्थन नहीं करते हैं इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं कुछ गलत कर रहा हूं।
क्या यह और भी तेज़ करने का कोई तरीका है?
मुझे यकीन नहीं है कि आपने इस दीपक्लोन() को लेबल क्यों किया है, जब आप केवल उथली प्रतिलिपि करना चाहते हैं। चूंकि तार अपरिवर्तनीय हैं, इसलिए स्ट्रिंग की एक उथली प्रति एक गहरी प्रति के बराबर होती है। इसके अलावा, मैन्युअल सेटिंग बहुत तेजी से होनी चाहिए क्योंकि बाइनरीफॉर्मेटर संपत्ति नाम, सेटर्स, कन्स्ट्रक्टर इत्यादि प्राप्त करने के लिए प्रतिबिंब का उपयोग करता है। – Gleno
@ गेलनो - यह विधि गहराई से ऑब्जेक्ट क्लोन करेगी यदि उसके अंदर नेस्टेड ऑब्जेक्ट्स (इस प्रकार नाम) – leora