随笔-15  评论-76  文章-0 

让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
点击这里下载
 

 

  • 作者:梁一鸣
  • 出处:http://liangyiming.cnblogs.com
  • 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出作者名称及原文连接,否则保留追究法律责任的权利。

  • posted on 2009-04-08 18:48 梁一鸣 阅读(...) 评论(...) 编辑 收藏