2009-04-06 12 views
3

複雑な2次元ベクトルグラフィックスを表示する必要があるSilverlightアプリケーションに取り組んでいます。 サーバーから圧縮されたXAMLファイルをダウンロードし、解析し(XamlRead)、ページ上のレイアウトルートに挿入します。 これはかなり小さいxamlファイルでうまくいきます。問題は、もっと大きなファイル(たくさんのコンテンツ)で動作させる必要があるということです。例えば、私の圧縮されていないxamlファイルのうちの1つは20 MBの大きさであり、XamlReadメソッドはそれを解析するのに長い時間を要します。私の質問は、サーバー側ですべての解析を行う方法があるかどうかです。 XamlReadメソッドのシリアル化されたバイナリ出力をBLOBとしてデータベースに格納することをお勧めします。しかし、私はそれをシリアル化しようとすると、私は "キャンバスオブジェクトはシリアル化可能としてマークされていません"というメッセージが表示されます。私は本当にアドバイスを感謝します。Silverlight XAMLオブジェクトのバイナリシリアル化

答えて

2

Silverlightには、多くのバイナリシリアル化が組み込まれていません。ただし、protobuf-netはSilverlightで動作し、このギャップを埋めるのに役立ちます。現在のビルドでは、(属性を追加することによって)あなたがコントロールする型を本当にシリアライズすることしかできませんが、属性を持たない型を直列化するためのサポートを追加する大きなリファクタリングの途中です。

私は、これが(うまくいけば)安定したビルドとして利用できるようになるまでには約2週間はかかることを期待していますが、それを見て歓迎します。

あなたはまだそれをシリアル化するために何か助けを与える必要があることに注意してくださいが、それは役に立つかもしれません。

特に、データフォーマット(「プロトコルバッファ」)は、処理が高密度で効率的であるように設計されているため、解析速度が向上します。 See here for more(数字は.NETのSilverlightではありません)

0

実際に解析が問題になる場合は、事前にコンパイルされた「BAML」というXAMLを使用すると役立ちます。これはXAMLファイルのバイナリ表現です。バイナリ形式にはあまりにも一般的なXMLの代わりにはるかに安価なパーサがあるので、これは多くの助けになります。 BAMLは、.NETコンパイラによって内部的に使用され、よりコンパクトなファイルを生成します。 http://www.sharpserializer.com/en/index.htmlを:

詳細について

は、私はSilverlightで高速なバイナリserlizationのために非常に使いやすいSharpSerializerパッケージを見つけたhttp://stuff.seans.com/2008/07/13/hello-wpf-world-part-2-why-xaml/

1

も参照してください。 Serializable属性を使用する必要はありませんが、publicメンバーのみを直列化します。

+0

sharpserializerは、公的な原告のみを連載します。また、特定のプロパティ(キャンバスなど)を除外するルールを定義することもできます。開発中は、sharpserializer xml-serializerを使用して、シリアル化されているものを見ることができます。バイナリのシリアライゼーションに変更して、メモリフットプリントを小さくします。 – k3b

関連する問題