为什么.net通用词典这么大

为什么.net通用词典这么大,.net,vb.net,generics,serialization,.net,Vb.net,Generics,Serialization,我正在VB.net中序列化一个通用词典,我很惊讶它只有一个条目,大约1.3kb。是我做错了什么,还是我应该做别的事情?我有大量的字典,把它们都通过网络发送出去真让我受不了。我用于序列化的代码是 Dim dictionary As New Dictionary(Of Integer, Integer) Dim stream As New MemoryStream Dim bformatter As New BinaryFormatter() dictionary.

我正在VB.net中序列化一个通用词典,我很惊讶它只有一个条目,大约1.3kb。是我做错了什么,还是我应该做别的事情?我有大量的字典,把它们都通过网络发送出去真让我受不了。我用于序列化的代码是

    Dim dictionary As New Dictionary(Of Integer, Integer)
    Dim stream As New MemoryStream
    Dim bformatter As New BinaryFormatter()

    dictionary.Add(1, 1)

    bformatter.Serialize(stream, dictionary)

    Dim len As Long = stream.Length

设置用于序列化的字典需要很多开销(显然,大约1.3kb;)。但是,如果您对键和值使用基本类型,那么随着向集合中添加更多元素,大小不会显著增加


此开销主要是一次性的前期成本-因此,一旦序列化了Dictionary类,包含的成员就不会增加太多大小。

字典的默认序列化必须包括字典类型、使用的比较器以及每个项的类型(键和值)的类型信息因为它们通常可能是子类型。必须为每个字典添加此开销。如果将数据打印为字符串,可以看到有许多完全限定的类型占用了大量字节:

\0\0\0\0???\0\0\0\0\0\0\0\0?系统.集合.通用.字典
2[[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]\0\0\0\b反对\b比较\bHashSize\rKeyValuePairs\0\0\b?系统.集合.通用.通用质量比较者
1[[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]\b?系统.集合.通用.KeyValuePairs
2[[System.Int32,mscorlib,Version=2.0.0.0.0.0,Culture=neutral,PublicKeyToken=B77A561934E089],[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089][\0\0\0\0\t\0\0\0\t\0\0\0\0\0\0?System.Collections.Generic.GenericEqualityComparer
1[[System.Int32,mscorlib,Version=2.0.0.0.0.0.0,Culture=neutral,PublicKeyToken=b77a561934e089]]\0\0\0\0\a\0\0\0\0\0\0\0\0\0?系统.集合.通用.键值对
2[[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Int32,mscorlib,Version=2.0.0.0.0.0,Culture=neutral,PublicKeyToken=B77A561934E089]???系统.集合.通用.键值对
2[[System.Int32,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089],[System.Int32,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089]\0\0\0\b\b\0\0\0\0\0\0\v

您可能更喜欢使用自定义格式进行序列化,或者使用稍微轻一点的标准格式,例如