在WCF传输中,如果传输DataSet对象,一旦row很多,比如12000条时,传输就很慢了因为DataSet默认是以XML形式存在的,占用的传输量比较大,压缩一下可以瘦身很多,这样对于网络传输的瓶颈是个很好的解决方式
using System;
using System.IO;
using System.Data;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace XujunTest
{
///
/// DataSet序列化和反序列化
///
class BinaryFormat
{
///
/// DataSet序列化
///
/// 需要序列化的DataSet
///
public static byte[] GetBinaryFormatDataSet(DataSet ds)
{
//创建内存流
MemoryStream memStream = new MemoryStream();
//产生二进制序列化格式
IFormatter formatter = new BinaryFormatter();
//指定DataSet串行化格式是二进制
ds.RemotingFormat = SerializationFormat.Binary;
//串行化到内存中
formatter.Serialize(memStream, ds);
//将DataSet转化成byte[]
byte[] binaryResult = memStream.ToArray();
//清空和释放内存流
memStream.Close();
memStream.Dispose();
return binaryResult;
}
///
/// DataSet反序列化
///
/// 需要反序列化的byte[]
///
public static DataSet RetrieveDataSet(byte[] binaryData)
{
//创建内存流
MemoryStream memStream = new MemoryStream(binaryData);
//产生二进制序列化格式
IFormatter formatter = new BinaryFormatter();
//反串行化到内存中
object obj = formatter.Deserialize(memStream);
//类型检验
if (obj is DataSet)
{
DataSet dataSetResult = (DataSet)obj;
return dataSetResult;
}
else
{
return null;
}
}
}
}