XML vs. Binäre Leistung für Serialisierung / Deserialisierung
Ich arbeite an einer kompakten Framework-Anwendung und muss die Leistung steigern. Die App funktioniert derzeit offline, indem Objekte in XML serialisiert und in einer Datenbank gespeichert werden. Mit einem Profiling-Tool konnte ich feststellen, dass dies einen erheblichen Mehraufwand bedeutet und die App verlangsamt. Ich dachte, wenn ich zu einer binären Serialisierung wechseln würde, würde sich die Leistung erhöhen, aber da dies in dem kompakten Framework nicht unterstützt wird, habe ich mir protobuf-net angesehen. Die Serialisierung scheint schneller zu sein, aber die Deserialisierung ist viel langsamer und die App deserialisiert mehr als die Serialisierung.
Sollte die binäre Serialisierung schneller sein und wenn ja, was kann ich tun, um die Leistung zu beschleunigen? Hier ist ein Ausschnitt davon, wie ich sowohl XML als auch Binärdaten verwende:
XML-Serialisierung:
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-net Binary-Serialisierung:
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;
}