Possible Duplicate:
Fastest serializer and deserializer with lowest memory footprint in C#?
我正在使用 BinaryFormatter
类来序列化结构或类。 (在序列化之后,我将在保存之前加密序列化文件。(当然在反序列化之前解密它))
但我听说 .Net Framework 中还有其他一些序列化类。像 XmlSerializer、JavaScriptSerializer、DataContractSerializer 和 protobuf-net。
我想知道,哪一个最适合我?
序列化/反序列化所需的 RAM 空间更少对我来说是最重要的。速度也很重要。
如果您的目标是减少内存需求,那么不要序列化然后加密:而是直接序列化为加密Stream
。 Stream
API 设计为链接(装饰器模式)以执行多个转换而无需过多缓冲。同样:从解密流中反序列化;不要解密然后反序列化。通过这种方式,数据可以根据需要即时加密/解密;除了减少内存,它还有利于安全——因为这也意味着整个数据永远不会以解密形式作为单个缓冲区存在。参见 CryptoStream
在 MSDN 上获取完整示例。
一些补充说明;如果您确实碰巧使用了 protobuf-net,可以通过使用“分组”编码来减少任何内存缓冲;你看:子消息(包括列表)的默认值是“长度前缀”——它通常这样做的方式是通过在内存中缓冲数据来计算长度。然而,protobuf 还支持一种使用开始/结束标记的格式,这种格式从不需要知道长度,因此从不需要缓冲——因此整个序列可以直接写入输出(好吧,它仍然使用缓冲区在内部改善 IO,但它会在此处汇集缓冲区,以实现最大程度的重用)。对于子对象,这很简单:
[ProtoMember(11, DatFormat = DataFormat.Grouped)]
public Customer Customer {get;set;} // a sub-object
(其中11
没有意义)