के लिए एक्सएमएल बनाम बाइनरी प्रदर्शन मैं एक कॉम्पैक्ट फ्रेमवर्क आवेदन पर काम कर रहा हूं और प्रदर्शन को बढ़ावा देने की जरूरत है। ऐप वर्तमान में एक्सएमएल को ऑब्जेक्ट्स को क्रमबद्ध करके और डेटाबेस में संग्रहीत करके ऑफ़लाइन काम करता है। एक प्रोफाइलिंग टूल का उपयोग करके मैं देख सकता था कि यह ऐप धीमा कर रहा था, यह काफी बड़ा ओवरहेड था। मैंने सोचा कि अगर मैं एक द्विआधारी क्रमबद्धता में स्विच करता हूं तो प्रदर्शन बढ़ेगा, लेकिन क्योंकि यह कॉम्पैक्ट फ्रेमवर्क में समर्थित नहीं है, मैंने प्रोटोबफ-नेट को देखा। क्रमबद्धता तेज लगती है, लेकिन deserialization बहुत धीमी है और ऐप serializing से अधिक deserializing कर रहा है।सीरियलाइजेशन/Deserialization
बाइनरी सीरियलाइजेशन तेज होना चाहिए और यदि ऐसा है तो मैं प्रदर्शन को तेज करने के लिए क्या कर सकता हूं? यहाँ कैसे मैं दोनों एक्सएमएल और बाइनरी उपयोग कर रहा हूँ का एक टुकड़ा है:
एक्सएमएल क्रमबद्धता:
public string Serialize(T obj)
{
UTF8Encoding encoding = new UTF8Encoding();
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
serializer.Serialize(stream, obj);
stream = (MemoryStream)writer.BaseStream;
return encoding.GetString(stream.ToArray(), 0, Convert.ToInt32(stream.Length));
}
public T Deserialize(string xml)
{
UTF8Encoding encoding = new UTF8Encoding();
XmlSerializer serializer = new XmlSerializer(typeof(T));
MemoryStream stream = new MemoryStream(encoding.GetBytes(xml));
return (T)serializer.Deserialize(stream);
}
Protobuf शुद्ध बाइनरी क्रमांकन:
public byte[] Serialize(T obj)
{
byte[] raw;
using (MemoryStream memoryStream = new MemoryStream())
{
Serializer.Serialize(memoryStream, obj);
raw = memoryStream.ToArray();
}
return raw;
}
public T Deserialize(byte[] serializedType)
{
T obj;
using (MemoryStream memoryStream = new MemoryStream(serializedType))
{
obj = Serializer.Deserialize<T>(memoryStream);
}
return obj;
}
मैं रेड-गेट एएनटीएस प्रोफाइलर का उपयोग करने का सुझाव देने जा रहा था लेकिन यह कॉम्पैक्ट फ्रेमवर्क (Google "लाल-गेट चींटियों प्रोफाइलर कॉम्पैक्ट" पर खोज नहीं करता है) – Kane