Desempenho XML vs Binário para Serialização / Desserialização
Estou trabalhando em um aplicativo de estrutura compacta e preciso aumentar o desempenho. O aplicativo atualmente funciona offline, serializando objetos para XML e armazenando-os em um banco de dados. Usando uma ferramenta de criação de perfil, percebi que isso era uma grande sobrecarga, diminuindo a velocidade do aplicativo. Eu pensei que se eu mudasse para uma serialização binária, o desempenho aumentaria, mas como isso não é suportado no framework compacto eu olhei para o protobuf-net. A serialização parece mais rápida, mas a desserialização é muito mais lenta e o aplicativo está fazendo mais desserialização do que serializando.
A serialização binária deve ser mais rápida e, em caso afirmativo, o que posso fazer para acelerar o desempenho? Aqui está um trecho de como eu estou usando XML e binário:
Serialização de XML:
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);
}
Serialização binária de Protobuf-net:
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;
}