Rendimiento XML vs binario para serialización / deserialización

Estoy trabajando en una aplicación de marco compacto y necesito aumentar el rendimiento. La aplicación actualmente funciona sin conexión mediante la serialización de objetos a XML y su almacenamiento en una base de datos. Usando una herramienta de creación de perfiles, pude ver que esto suponía una gran sobrecarga, lo que ralentizó la aplicación. Pensé que si cambiaba a una serialización binaria, el rendimiento aumentaría, pero como no se admite en el marco compacto, observé protobuf-net. La serialización parece más rápida, pero la deserialización es mucho más lenta y la aplicación está haciendo más deserialización que la serialización.

¿Debería la serialización binaria debería ser más rápida y, en caso afirmativo, qué puedo hacer para acelerar el rendimiento? Aquí hay un fragmento de cómo estoy usando tanto XML como binario:

Serialización 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 serialización binaria:

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;
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta