Tôi đang làm việc trên một ứng dụng khung nhỏ gọn và cần tăng hiệu suất. Ứng dụng hiện hoạt động ngoại tuyến bằng cách tuần tự hóa các đối tượng vào XML và lưu trữ chúng trong cơ sở dữ liệu. Sử dụng công cụ lược tả tôi có thể thấy đây là một chi phí khá lớn, làm chậm ứng dụng. Tôi nghĩ nếu tôi chuyển sang một serialization nhị phân hiệu suất sẽ tăng lên, nhưng bởi vì điều này không được hỗ trợ trong khuôn khổ nhỏ gọn, tôi nhìn vào protobuf-net. Việc serialization có vẻ nhanh hơn, nhưng deserialization chậm hơn nhiều và các ứng dụng đang làm nhiều deserializing hơn serializing.XML so với hiệu suất nhị phân để tuần tự hóa/Deserialization
Nếu chuỗi tuần tự hóa nhị phân phải nhanh hơn và nếu có thì tôi có thể làm gì để tăng tốc hiệu suất? Dưới đây là một đoạn như thế nào Tôi đang sử dụng cả XML và nhị phân:
serialization 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 Binary serialization:
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;
}
Tôi sẽ đề xuất sử dụng trình thu thập thông tin Red-Gate ANTS nhưng không hoạt động với khung Compact (tìm kiếm trên google "kiến trúc nhỏ gọn của cổng đỏ") – Kane