/ / DataContractSerializer बनाम BinaryFormatter प्रदर्शन - c #, c # -4.0, datacontractserializer, बाइनरीफॉर्मेटर

DataContractSerializer बनाम BinaryFormatter प्रदर्शन-c#, c#-४.०, DataContractSerializer, BinaryFormatter

मैं और अधिक समझने के लिए लेखों के माध्यम से जा रहा थाडेटाकंट्रेसेरिएलाइज़र और बाइनरीफ़ॉर्मेट सीरियल के बारे में। अब तक किए गए रीडिंग के आधार पर, मैं इस धारणा के तहत था कि बाइनरीफॉर्मेटर में डाटाकंट्रेक्टाइज़र की तुलना में कम पदचिह्न होना चाहिए। कारण DataContractSerializer xml infoset को क्रमबद्ध करता है जबकि बाइनरीफ़ॉर्मेटर एक मालिकाना बाइनरी प्रारूप में क्रमबद्ध होता है।

निम्नलिखित परीक्षण है

    [Serializable]
[DataContract]
public class Packet
{
[DataMember]
public DataSet Data { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
}

डेटासेट के साथ आबादी थी 121317 से पंक्तियाँ [AdventureWorks].[Sales].[SalesOrderDetail] तालिका

    using (var fs = new FileStream("test1.txt", FileMode.Create))
{
var dcs = new DataContractSerializer(typeof(Packet));
dcs.WriteObject(fs, packet);
Console.WriteLine("Total bytes with dcs = " + fs.Length);
}



using(var fs = new FileStream("test2.txt", FileMode.Create))
{
var bf = new BinaryFormatter();
bf.Serialize(fs, packet);
Console.WriteLine("Total bytes with binaryformatter = " + fs.Length);
}


Results
Total bytes with dcs = 57133023
Total bytes with binaryformatter = 57133984

सवाल बाइटफॉर्मफॉर्म के लिए बाइट की गणना डेटासॉन्ट्रैक्टेलाइज़र से अधिक क्यों है? कंधे "यह बहुत कम नहीं होगा?

उत्तर:

जवाब के लिए 5 № 1

DataSet एक बुरी आदत है: यह लागू करता है ISerializable और तब डिफ़ॉल्ट रूप से XML की स्ट्रिंग के रूप में अपनी सामग्री को क्रमबद्ध करता है, तब भी जब इसे पास किया जाता है BinaryFormatter। यही कारण है कि दो धाराएँ आकार में लगभग समान हैं। यदि आप इसे बदलते हैं RemotingFormat संपत्ति के लिए Binary, यह वही काम करेगा लेकिन एक नया निर्माण करके BinaryFormatter, अपने आप में एक डंपिंग MemoryStream, और फिर बाहरी में एक मूल्य के रूप में परिणामी बाइट सरणी डाल रहा है BinaryFormatter“धारा है।

उस के बाहर, BinaryFormatter प्रकारों के बारे में अधिक जानकारी रखता है, जैसे कि वे जिस विधानसभा से आए थे उसका पूरा नाम; इसके अलावा, XML के लिए प्रति-ऑब्जेक्ट ओवरहेड है a DataSet.

यदि आप दो धारावाहिकों के व्यवहार की तुलना करने की कोशिश कर रहे हैं, DataSet एक गरीब पसंद है क्योंकि यह बहुत ज्यादा उगता है।