Wydajność XML a wydajność binarna dla serializacji / deserializacji

Pracuję nad kompaktową aplikacją ramową i muszę zwiększyć wydajność. Aplikacja działa obecnie w trybie offline, serializując obiekty na XML i zapisując je w bazie danych. Korzystając z narzędzia do profilowania, widziałem, że to dość duży koszt, spowalniający aplikację. Pomyślałem, że jeśli przestawię się na serializację binarną, wydajność wzrośnie, ale ponieważ nie jest obsługiwana w kompaktowej strukturze, spojrzałem na protobuf-net. Serializacja wydaje się szybsza, ale deserializacja znacznie wolniejsza, a aplikacja robi więcej deserializacji niż serializacji.

Czy serializacja binarna powinna być szybsza, a jeśli tak, to co mogę zrobić, aby przyspieszyć wydajność? Oto fragment tego, jak używam zarówno XML, jak i binarnego:

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

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

questionAnswers(6)

yourAnswerToTheQuestion