복잡한 2 차원 벡터 그래픽을 표시해야하는 Silverlight 응용 프로그램에서 작업하고 있습니다. 서버에서 압축 된 XAML 파일을 다운로드하여 구문 분석하고 (XamlRead) 페이지의 레이아웃 루트에 삽입합니다. 아주 작은 xaml 파일에 대해서는이 방법이 유용합니다. 문제는 훨씬 더 큰 파일 (더 많은 콘텐츠가 포함 된 파일)에서 작동하도록해야한다는 것입니다. 예를 들어, 압축되지 않은 xaml 파일 중 하나는 20MB 크기이고 XamlRead 메서드는이를 분석하는 데 오랜 시간이 걸립니다. 내 질문은 서버 측에서 모든 구문 분석을 수행 할 수있는 방법이 있는지 여부입니다. XamlRead 메서드의 serialize 된 이진 출력을 BLOB로 데이터베이스에 저장하는 것이 가장 좋습니다. 그러나 그것을 serialize하려고하면 Canvas 개체가 serializable로 표시되지 않는다는 메시지가 나타납니다. 나는 정말로 어떤 충고도 감사 할 것이다.Silverlight XAML 객체의 이진 직렬화
답변
Silverlight에는 많은 이진 serialization이 내장되어 있지 않습니다. 그러나 protobuf-net은 Silverlight에서 작동하므로이 차이를 막을 수 있습니다. 현재 빌드에서는 (속성 추가로 인해) 실제로 제어 할 수있는 유형 만 직렬화 할 수 있습니다. 그러나 속성이없는 유형을 직렬화하기위한 지원을 추가하는 큰 리팩터링 중입니다.
이 빌드가 (희망적으로) 안정적인 빌드로 제공되기까지는 약 2 주가 더 소요될 것으로 예상됩니다.하지만 그때 살펴볼 수는 있습니다.
여전히 도움이 될만한 참고 사항이 있지만 (유용하게 쓸 수는 있습니다.)
특히 데이터 형식 ("프로토콜 버퍼")은 처리가 복잡하고 효율적이기 때문에 구문 분석 속도가 빨라야합니다. See here more (숫자는 .NET .NET이 아니며 Silverlight가 아닙니다.)
구문 분석이 실제로 문제가되는 경우 'BAML'이라는 미리 컴파일 된 XAML을 사용하는 것이 좋습니다. 이것은 XAML 파일의 이진 표현입니다. 바이너리 형식은 너무 일반적인 XML 대신 훨씬 더 저렴한 파서를 가지고 있기 때문에 많은 도움이됩니다. 또한 BAML은 .NET 컴파일러에서 내부적으로 사용되어보다 컴팩트 한 파일을 생성합니다. http://www.sharpserializer.com/en/index.html을 :
자세한 내용은, 나는 실버 라이트에 빠른 바이너리 serlization 사용하기 매우 쉽게 SharpSerializer 패키지를 발견했습니다 http://stuff.seans.com/2008/07/13/hello-wpf-world-part-2-why-xaml/
도 참조하십시오. Serializable 특성을 사용할 필요는 없지만 공용 멤버 만 serialize합니다.
sharpserializer는 public proprties 만 serialize합니다. 특정 속성 (예 : 캔버스)을 제외하는 규칙을 정의 할 수 있습니다. 개발하는 동안 sharpserializer xml-serializer를 사용하여 직렬화되는 것을 볼 수 있습니다. 완료 후 바이너리 직렬화로 변경하여 메모리 사용 공간을 줄인다. – k3b