让NET CF 支持Binary Formatter 序列化(Support Binnary Formatter Serialization on NET Compact Framework)
众所周知,NET CF从最早的1.0发展到今天的3.0,一直保持着紧凑与高效。作为NET FX的缩减版,为了达到小巧,NET CF仅仅保留了最常用的函数库。
其中Binary Formatter Serialization就是一个遗憾,使用二进制进行序列化,无论是执行效率或是存储空间,都要比XML文本更具有优势,这一点尤其表现在缺乏内存与存储空间的Device上。
CompactFormatter 最为一个第三方的免费工具,得到了许多人的青睐。他可以让你在NET CF下实现二进制序列化。
使用CompactFormatter的优势
Device(智能手机及PDA)上的存储空间有限,如果能把内存中的数据保存为二进制文件(即将对象序列化为二进制数据流并写入磁盘中),
可以更有效地利用存储空间,提高执行效率。另外,基于Device开发WEB Service应用时,某些传输的对象包含的内容较多,如DataSet,我们将其序列化成XML进行传输时,
耗费了大量序列化及反序列号时间,并且浪费大量的网络资源。由于Device的CPU和内存都较小,大数据量下,传输的时候时间会很长,带来的用户体验很不好。
在这种情况下,你可以尝试使用CompactFormatter封装DataSet,这可以带来三大好处(减少CPU消耗;降低内存占用;降低数据传输量,从而提高传输效率)经过我实际测试发现,基于DataSet的WebService应用,基于大数据量下测试,使用CompactFormatter可以提高300%-500%传输速度,减少50%左右的内存占用。
如何使用CompactFormatter
使用方式非常简单,与NET FX的BinaryFormatter用法相同,两个简单的例子如下:
序列化对象为字符串:
public string CompactFormatterSerialize(Object obj) { CompactFormatter.CompactFormatterPlus CFormatterPlus; System.IO.MemoryStream memStream = new System.IO.MemoryStream(); CFormatterPlus.Serialize(memStream, obj); memStream.Seek(0, SeekOrigin.Begin); String s = Convert.ToBase64String(memStream.GetBuffer(), 0, (int)memStream.Length); memStream.Close(); return s; }
反序列化字符串为对象:
public object CompactFormatterDeserialize(string s) { CompactFormatter.CompactFormatterPlus CFormatterPlus2; MemoryStream memStream2 = new MemoryStream(Convert.FromBase64String(s)); object obj = (Object)CFormatterPlus2.Deserialize(memStream2); memStream2.Close(); return obj; }
将你需要序列化的对象,替换你的Object,就可以实现具体操作了。
如何获得CompactFormatter
点击这里下载