WebService传输大数据量DataSet,SharpZipLib压缩和不压缩效率对比

.Net技术 针尖舞 9年前 (2015-08-12) 2716次浏览 0个评论
使用WebService返回从数据库查询的数据5W条。

第一种情况:

DataSet + DataSetSurrogate + BinaryFomatter

返回的Byte数量为8 801 983

时间:调用WebService:10+秒左右,解压:2秒左右

第二种情况:

DataSet + DataSetSurrogate + BinaryFomatter + SharpZipLib 

返回的Byte数量为1 259 938

时间:调用WebService:14+秒左右,解压:4+秒左右

当数据条数增加为10W的时候:

第一种情况:

DataSet + DataSetSurrogate + BinaryFomatter

时间:调用WebService:40+秒左右,解压:5秒左右

第二种情况:

DataSet + DataSetSurrogate + BinaryFomatter + SharpZipLib 

时间:调用WebService:47+秒左右,解压:10+秒左右

代码:

第一种情况:

DataSet + DataSetSurrogate + BinaryFomatter

[WebMethod]

public byte [] GetDataSetZip()

{

string connString = @”server=localhost;database=NorthWind;uid=sa;pwd=vault”;

string sqlString = @” SELECT top 100000* FROM Orders”;

SqlConnection conn = new SqlConnection(connString);

SqlDataAdapter apter = new SqlDataAdapter(sqlString,conn);

DataSet ds = new DataSet();

apter.Fill(ds);

DataSetSurrogate dss = new DataSetSurrogate(ds);

MemoryStream s= new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();

bf.Serialize(s,dss);

byte[] ret = s.ToArray();

return ret;

}

第二种情况:

DataSet + DataSetSurrogate + BinaryFomatter + SharpZipLib 

[WebMethod]

public byte [] GetDataSetZip_SharpZipLib()

{

string connString = @”server=localhost;database=NorthWind;uid=sa;pwd=vault”;

string sqlString = @” SELECT top 100000* FROM Orders”;

SqlConnection conn = new SqlConnection(connString);

SqlDataAdapter apter = new SqlDataAdapter(sqlString,conn);

DataSet ds = new DataSet();

apter.Fill(ds);

MemoryStream ms = new MemoryStream();

ZipOutputStream zos = new ZipOutputStream(ms);

zos.PutNextEntry(new ZipEntry(ds.DataSetName));   

BinaryFormatter bf = new BinaryFormatter();

DataSetSurrogate dss = new DataSetSurrogate(ds);

bf.Serialize(zos, dss);

zos.CloseEntry();

zos.Close();

byte[] ret = ms.ToArray();   

ms.Close();

return ret;

}

如果是在本地局域网WebService测试的话,网络传输时间影响比较小,所以压缩消耗的时间可能大于减少容量节约下来的时间,所以才导致测试结果如此,找个不太好的外部网络环境作测试,压缩数据集就可以很大程度提高传输效率了

在比较之前,你要选确定条件,比方网络带宽

如果你是局域网,速度很快,当然压不压缩都一样,压缩反而增加了CPU处理时间

如果是30几K的猫,那么光传输8M的数据就是N长时间,那么就会发现压缩的好处

使用WebServices传输DataSet的瓶颈是在通讯上,因为数据量太大,所以使用压缩见效

另一个问题,调用一个dll.zlib.dll种的一个函数compress,但是程序运行总是崩溃。代码如下;

public class Zlib

{

   [DllImport(“zlibwapi.dll”)]

   public extern static int compress(out Byte[] dests, out long lenDest,  Byte[] srcs, long lenSrc);

}

[WebMethod]

public byte [] GetDataSetZip_zlib()

{

   string connString = @”server=localhost;database=NorthWind;uid=sa;pwd=vault”;

string sqlString = @” SELECT top 100* FROM Orders”;

SqlConnection conn = new SqlConnection(connString);

SqlDataAdapter apter = new SqlDataAdapter(sqlString,conn);

DataSet ds = new DataSet();

apter.Fill(ds);

DataSetSurrogate dss = new DataSetSurrogate(ds);

MemoryStream s= new MemoryStream();

BinaryFormatter bf = new BinaryFormatter();

bf.Serialize(s,dss);

byte[] srcByte = s.ToArray();

long lenDest = srcByte.Length + (long)(srcByte.Length * 0.01) + 13;

byte[] destByte = new byte[lenDest];

int ret;

try

{

ret = Zlib.compress(out destByte,out lenDest,srcByte,srcByte.Length+1);

         //代码运行到这里程序就崩溃了。

}

catch(Exception e)

{

     ;

}

return destByte;

}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WebService传输大数据量DataSet,SharpZipLib压缩和不压缩效率对比
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!