2009-04-06 12 views
3

Ich arbeite an Silverlight-Anwendung, die komplexe 2D-Vektorgrafiken anzeigen muss. Es lädt gepackte XAML-Dateien vom Server, analysiert sie (XamlRead) und injiziert sie in das Layout-Stammverzeichnis auf der Seite. Dies funktioniert für ziemlich kleine XAML-Dateien. Das Problem ist, dass ich mit viel größeren Dateien arbeiten muss (viel mehr Inhalt). Zum Beispiel ist eine meiner unkomprimierten XAML-Dateien 20 MB groß und die XamlRead-Methode dauert lange, um sie zu analysieren. Meine Frage ist, ob es eine Möglichkeit gibt, das gesamte Parsing auf der Serverseite durchzuführen. Es wäre am besten, serialisierte binäre Ausgaben der XamlRead-Methode als BLOB in der Datenbank zu speichern. Wenn ich jedoch versuche, es zu serialisieren, bekomme ich eine Meldung, dass "Canvas-Objekt nicht als serialisierbar markiert ist". Ich werde wirklich alle Ratschläge zu schätzen wissen.Binäre Serialisierung von Silverlight XAML-Objekt

Antwort

2

Silverlight hat nicht viel binäre Serialisierung eingebaut; Allerdings funktioniert protobuf-net auf Silverlight und kann helfen, diese Lücke zu schließen. Im aktuellen Build können Sie nur Typen, die Sie steuern, serialisieren (aufgrund von Attributen). Ich bin jedoch mitten in einem großen Refactor, um unter anderem Serialisierungstypen ohne Attribute zu unterstützen.

Ich erwarte, dass es noch ca. 2 Wochen dauern wird, bevor dies als (hoffentlich) stabiler Build verfügbar ist, aber Sie können es sich dann ansehen.

Beachten Sie, dass Sie noch etwas Hilfe geben müssen (sagen Sie ihm, was Sie serialisieren möchten), aber es kann nützlich sein.

Insbesondere das Datenformat ("Protokollpuffer") ist so konzipiert, dass es sowohl dicht als auch effizient zu verarbeiten ist, was die Parse-Geschwindigkeit erhöhen sollte. See here für mehr (Zahlen sind von Haupt-.NET, nicht Silverlight)

0

Wenn Parsing wirklich das Problem ist, könnte es hilfreich sein, vorkompilierte XAMLs namens 'BAML' zu verwenden. Dies ist eine binäre Darstellung der XAML-Datei. Da das binäre Format einen viel günstigeren Parser anstelle des zu generischen XML hat, hilft dies sehr. BAML wird auch intern vom .NET-Compiler verwendet, um kompaktere Dateien zu generieren.

Weitere Informationen finden Sie auch http://stuff.seans.com/2008/07/13/hello-wpf-world-part-2-why-xaml/

1

Ich habe das SharpSerializer Paket sehr einfach zu bedienen für schnelle binäre serlization in Silverlight gefunden: http://www.sharpserializer.com/en/index.html. Sie müssen das Serializable-Attribut nicht verwenden, es werden jedoch nur öffentliche Elemente serialisiert.

+0

sharpserializer serialisiert nur öffentliche Eigenschaften. Und Sie können Regeln definieren, um bestimmte Eigenschaften (z. B. Canvas) auszuschließen. Während der Entwicklung können Sie sharpserializer xml-serializer verwenden, um zu sehen, was serialisiert ist. Wenn Sie fertig sind, wechseln Sie zur binären Serialisierung, um einen kleineren Speicherbedarf zu erzielen. – k3b

Verwandte Themen