c# - 序列化方法的比较

标签 c# .net vb.net serialization

<分区>

Possible Duplicate:
Fastest serializer and deserializer with lowest memory footprint in C#?

我正在使用 BinaryFormatter 类来序列化结构或类。 (在序列化之后,我将在保存之前加密序列化文件。(当然在反序列化之前解密它))

但我听说 .Net Framework 中还有其他一些序列化类。像 XmlSerializer、JavaScriptSerializer、DataContractSerializer 和 protobuf-net。

我想知道,哪一个最适合我?

序列化/反序列化所需的 RAM 空间更少对我来说是最重要的。速度也很重要。

最佳答案

如果您的目标是减少内存需求,那么不要序列化然后加密:而是直接序列化为加密StreamStream API 设计为链接(装饰器模式)以执行多个转换而无需过多缓冲。同样:从解密流中反序列化;不要解密然后反序列化。通过这种方式,数据可以根据需要即时加密/解密;除了减少内存,它还有利于安全——因为这也意味着整个数据永远不会以解密形式作为单个缓冲区存在。参见 CryptoStream在 MSDN 上获取完整示例。

一些补充说明;如果您确实碰巧使用了 protobuf-net,可以通过使用“分组”编码来减少任何内存缓冲;你看:子消息(包括列表)的默认值是“长度前缀”——它通常这样做的方式是通过在内存中缓冲数据来计算长度。然而,protobuf 还支持一种使用开始/结束标记的格式,这种格式从不需要知道长度,因此从不需要缓冲——因此整个序列可以直接写入输出(好吧,它仍然使用缓冲区在内部改善 IO,但它会在此处汇集缓冲区,以实现最大程度的重用)。对于子对象,这很简单:

[ProtoMember(11, DatFormat = DataFormat.Grouped)]
public Customer Customer {get;set;} // a sub-object

(其中11没有意义)

关于c# - 序列化方法的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629930/

相关文章:

c# - 开始文件下载时如何避免 IE7 中出现安全消息?

c# - TreeView 的正则表达式

c# - 以 dd/mm/yy 格式选择和读取日期的更好方法?

vb.net - VB.NET 有哪些 StyleCop 之类的工具

c# - ASP.Net - 在具有动态长度的字符串上屏蔽前 6 个字符

c# - 使用包含方法的自定义 FaultException 类型

c# - 如何检查对象是否是sql to linq类型

c# - 使用语法糖/内置功能

.net - VB.net 从具有多列的 ListViews 中读取

c# - 更改在 .Net 中序列化的类的名称?