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
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)
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/
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.
- 1. Silverlight 3.0 Unterstützung für die binäre Serialisierung?
- 2. C# Objekt Binäre Serialisierung
- 3. Binäre Serialisierung eines Array von DateTime
- 4. Wie binäre binäre Serialisierung eines Objekts mit Compact Framework?
- 5. Warum ist die binäre Serialisierung schneller als die XML-Serialisierung?
- 6. Binäre Serialisierung/Deserialisierung in C++ und C#
- 7. Binäre Serialisierung langsam (manchmal) in .NET 4.6
- 8. protobuf-net NICHT schneller als binäre Serialisierung?
- 9. Struct für binäre Nachricht Serialisierung/Deserialisierung
- 10. Binäre Serialisierung und Deserialisierung ohne Erstellen von Dateien (über Zeichenfolgen)
- 11. Binäre Serialisierung im Vergleich zu JSON im Vergleich zu xml
- 12. Wie serialisierte Daten zu minimieren - binäre Serialisierung hat großen Aufwand
- 13. Wie ignoriert man Event-Klasse Mitglied für die binäre Serialisierung?
- 14. .NET: Wie binäre Serialisierung eines Objekts mit Attribut [DataContract]?
- 15. Wie binäre Serialisierung einer Klasse in einer Portable Class Library?
- 16. .NET binäre Serialisierung zwischen 32-Bit- und 64-Bit-Betriebssystem
- 17. Binäre Version von Iostream
- 18. Binäre Serialisierung von Daten mit variabler Länge und Nulllängen-Arrays, ist es sicher?
- 19. Serialisierung von Strukturen
- 20. Serialisierung von privaten Mitgliedsdaten
- 21. Benutzerdefinierte Serialisierung von Basisklasseneigenschaften
- 22. Serialisierung von Objekten
- 23. Debuggen von BinaryFormatter-Serialisierung
- 24. RavenDB Serialisierung von NameValueCollection
- 25. Serialisierung von benutzerdefinierten Objekten
- 26. XML-Serialisierung von Arrays
- 27. Golan effiziente binäre Codierung
- 28. Java: Serialisierung/Deserialisierung zu/von XML anstelle von binär
- 29. Objekte speichern/Serialisierung
- 30. Boost-Serialisierung Leistung: Text vs. Binärformat
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