-
Notifications
You must be signed in to change notification settings - Fork 2
Home
This library, also available via Nuget, provides the FastBinaryFormatter
class, an IFormatter
implementation as a replacement for the standard BinaryFormatter for serialization purposes. It has the following features:
- It has a higher upper limit for the number of objects being serialized. The standard BinaryFormatter has a limit of ~13.2 million objects. The FastBinaryFormatter limits 2^31 reference-type instances and poses no limits to value-type instances.
- It runs faster and is less memory-demanding, especially during deserialization.
- Serialization streams typically have smaller size compared to the ones produced by BinaryFormatter and they are not compatible.
- Serialization streams are portable between 32 bit and 64 bit applications.
- Relies on the standards. As a consequence, existing serializable classes, like those in the .NET base class library, need no change. Specifically, it supports:
SerializableAttribute
NonSerializedAttribute
OptionalFieldAttribute
OnSerializingAttribute
OnSerializedAttribute
OnDeserializingAttribute
OnDeserializedAttribute
ISerializable
IDeserializationCallback
IObjectReference
ISerializationSurrogate
The significant performance gain comes at the cost of not supporting a very specific scenario:
During deserialization, if a registered ISerializationSurrogate
returns
in method SetObjectData
a (non-null) different object
than the one supplied to populate, then the data supplied
in the SerializationInfo
must not recursively cause
a deserialization cycle up to the new object.
A cycle is allowed though if it is established outside the deserialized objects.
In particular, cycles formed by associations created by other surrogates are allowed.