저는 소형 프레임 워크 응용 프로그램을 개발 중이므로 성능을 향상시켜야합니다. 이 응용 프로그램은 현재 개체를 XML로 serialize하고 데이터베이스에 저장하여 오프라인으로 작동합니다. 프로파일 링 도구를 사용하면 앱이 느려지면서 오버 헤드가 커지는 것을 알 수있었습니다. 필자는 바이너리 직렬화로 전환하면 성능이 향상 될 것이라고 생각했지만, 이것이 소형 프레임 워크에서 지원되지 않기 때문에 protobuf-net을 살펴 보았습니다. 직렬화는 더 빨라지지만 비 직렬화는 훨씬 느려지고 응용 프로그램은 직렬화보다 직렬화를 더 많이 수행하고 있습니다.XML과 직렬화/직렬화 해제 용 이진 성능
이진 직렬화가 더 빨라야합니까? 그렇다면 성능 향상을 위해 무엇을 할 수 있습니까? 여기에 내가 XML 및 바이너리를 모두 사용하고 방법의 조각입니다 :
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 바이너리 직렬화 :
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;
}
레드 게이트 ANTS 프로파일 러 사용을 제안 하겠지만 컴팩트 프레임 워크 (google "red-gate ants profiler compact"검색)와 함께 작동하지 않습니다. – Kane