2010-08-27 12 views

Antwort

9

ViewState wird serialisiert mit binärer Serialisierung unter Verwendung ObjectStateFormatter. Zitat aus der Dokumentation:

Die ObjectStateFormatter Klasse ist optimiert viele gemeinsame .NET Framework Referenztypen serialisiert und Format, sowie Konstanten. Die folgende Tabelle listet die Typen auf, die optimiert sind.

Array, Datum- und Int16, String, Arraylist, Double, Int32, String [], Boolean, Enum, null (Nothing), String.Empty, Byte, Hashtable, Paar, Drilling, Char, Hybriddictionary , Single, Typ, Farbe, IDictionary,

Zusätzlich während herkömmlichen String-Typen und String Arrays zu und von einem serialisierten binären Schriftsteller unverändert, einige Strings werden optimierte Tabellen, indem internen String geschrieben werden. Zeichenketten sind optimiert mit diesen Tabellen, wenn die Zeichenfolge ein TypeConverter Objekt zugeordnet ist oder wenn die Zeichenfolge tatsächlich eine Instanz der IndexedString-Klasse ist.

Andere Arten nicht oben aufgeführt sind binär serialisiert mit einem BinaryFormatter-Objekt, wenn sie die ISerializable-Schnittstelle implementieren oder mit dem SerializableAttribute-Attribut versehen. Die ObjectStateFormatter-Klasse ist nicht optimiert für diese serialisierbaren Typen .

Wenn die ObjectStateFormatter Klasse eine Art trifft, die nicht serializable, ein Argument Ausnahme ausgelöst.

Für ein Objekt binären serializable im ViewState muss sein, um es mit dem [Serializable]-Attribute versehen werden. Sie können also jedes Objekt mit diesem Attribut in ViewState setzen. Beachten Sie, dass auch einfache Typen wie string, int, float, ... in ViewState platziert werden können.

1

Typen müssen serialisierbar sein, um in ViewState platziert zu werden. ViewState ist eine serialisierte Sammlung von Objekten, so dass alle serialisierbaren Objekte dort eingefügt werden können.

0

So ziemlich alles, was serialisierbar ist. Beachten Sie jedoch, dass die Daten über die Verbindung zwischen dem Server und dem Webbrowser (und zurück, während Postbacks) gesendet werden. Daher sollten Sie die Lautstärke möglichst niedrig halten.

1

Welche Objekte - nach Darren und Andrew - irgendwelche serialisierbaren Objekte. Warum serialisierbar?So, dass der Staat wie

serialisiert werden kann
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY1NTgzODUwMg9kFgJmD2QWAgIDD2QWAgIBD2QWBgIBDw8WAh4EVGV4dAUXU3VwcGxpZXIgUG9y 

jedoch in der Praxis müssen Ansichtszustand auf ein Minimum zu halten, wie es Bandbreite/Seitengröße Auswirkungen auf die Leistung hat. Kontrollen sind die häufigsten Benutzer von Viewstate.

1

Legen Sie keine Objekte vom Typ Guid in ViewState. Der ObjectStateFormatter erkennt sie nicht und sie werden bei der Verwendung von BinaryFormatter mit satten 130 Byte pro GUID blockiert. Sie speichern sie besser als Strings und analysieren sie beim Lesen. Dies funktioniert jedoch nicht immer, beispielsweise wenn Guid als Schlüssel in einem Raster verwendet wird.

Wenn Sie Aufzählungen in ViewState laden/speichern, gewinnen Sie ein bisschen, indem Sie sie von/in einen ganzzahligen Typ konvertieren. In der Eigenschaft Ihres Steuerelements kennen Sie den erforderlichen Aufzählungstyp, der im serialisierten ViewState nicht codiert werden muss.

Es lohnt sich, Reflector zu verwenden, um die Implementierung von ObjectStateFormatter zu überprüfen, um zu sehen, wie alles gehandhabt wird, damit Sie etwas über den Prozess und seine Einschränkungen wissen.

Verwandte Themen