XML vs Binaire de performance pour la Sérialisation/Désérialisation

Je suis en train de travailler sur un compact cadre de l'application et de la nécessité de booster les performances. L'application fonctionne hors ligne par la sérialisation des objets au format XML et de les stocker dans une base de données. À l'aide d'un outil de profilage j'ai pu voir c'était tout à fait une grande surcharge, le ralentissement de l'application. J'ai pensé que si je suis passé à une sérialisation binaire la performance serait d'augmenter, mais parce que ce n'est pas pris en charge dans le cadre compact, j'ai regardé protobuf-net. La sérialisation semble plus rapide, mais la désérialisation beaucoup plus lente, et l'application est de faire plus de désérialisation de la sérialisation.

Devrait sérialisation binaire devrait être plus rapide et si oui qu'est ce que je peux faire pour accélérer les performances? Voici un extrait de comment je suis en utilisant XML et binaire:

La sérialisation 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);
}

Protobuf-net sérialisation Binaire:

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;
}
J'allais suggérer à l'aide de Red-Gate ANTS profiler, mais il ne fonctionne pas avec le Compact framework (recherche sur google "rouge-porte ants profiler compact")

OriginalL'auteur Charlie | 2009-07-07