संदर्भ: यह एक प्रश्न पर आधारित है जिसे पूछा गया था और उसके बाद जवाब देने से पहले हटा दिया गया था - लेकिन मुझे लगता है कि यह एक अच्छा सवाल है, इसलिए मैंने इसे लिखा है, इसे दोहराया है, और इसे फिर से पोस्ट किया है।क्या मैं प्रोटोबफ-नेट के साथ आवंटन से बचने के लिए ऑब्जेक्ट इंस्टेंस का पुन: उपयोग कर सकता हूं?
प्रोटोबफ-नेट का उपयोग करके एक उच्च-थ्रूपुट परिदृश्य में, जहां बहुत से आवंटन एक समस्या है (विशेष रूप से जीसी के लिए), क्या ऑब्जेक्ट का पुन: उपयोग करना संभव है? उदाहरण के लिए Clear()
विधि जोड़कर?
[ProtoContract]
public class MyDTO
{
[ProtoMember(1)]
public int Foo { get; set; }
[ProtoMember(2)]
public string Bar { get; set; }
[ProtoMember(3, DataFormat = DataFormat.Group)]
public List<int> Values { get { return values; } }
private readonly List<int> values = new List<int>();
public void Clear()
{
values.Clear();
Foo = 0;
Bar = null;
}
}
हाय मार्क, अगर मैं साफ़() विधि को लागू नहीं करता तो क्या होता है? क्या सभी फ़ील्ड वैसे भी ओवरराइट हो जाएंगे? – driAn
@driAn केवल इनबाउंड स्ट्रीम में डेटा वाले फ़ील्ड असाइन किए जाएंगे। यदि आप एक कस्टम कारखाने का उपयोग करते हैं जो उदाहरणों को पुन: पेश करता है, तो आपको कारखाने के अंदर अपना खुद का रीसेट कोड प्रदान करना चाहिए। यदि आप कस्टम फैक्ट्री का उपयोग नहीं कर रहे हैं तो यह कोई समस्या नहीं है –
हाय मार्क, मैं उपरोक्त विधि Deserialize() को ऑब्जेक्ट इंस्टेंस के साथ भरने/विलय करने के लिए देख रहा हूं। लेकिन मुझे यह नहीं मिला। मुझे केवल एक विधि मिलती है: Serializer.Deserialize (स्ट्रीम)। क्या भरने के लिए ऑब्जेक्ट इंस्टेंस निर्दिष्ट करने का अभी भी कोई तरीका है? मैं ऑब्जेक्ट पूल से वस्तुओं का पुन: उपयोग करना चाहता हूं और इस तरह से एक कस्टम फैक्ट्री के साथ दूसरे तरीके से निपटना आसान लगता है ... अग्रिम धन्यवाद। –