本帖来源:http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html

最近一直在优化项目的性能,就在前几天找到了一些资料,终于有方案了,那就是压缩数据。

一丶前端和后端的压缩和解压缩流程

  

二丶优点和缺点

  优点:①字符串的压缩率能够达到70%-80%左右

     ②字符串数量更少了

  缺点:①CPU的开销会大一点,不过在可承受范围之内

三丶通过标记来说明数据是否压缩过

  这个一开始是没有想到,是经理提醒我的,通过在数据(字符串)的最前端添加一个标记来说明数据是否压缩过。

  因为只有当数据大于一定数量的时候才进行压缩操作。

四丶测试(简单的测试)

  环境:1.启动500线程 (相当于500个客户端)

2.500个线程同时调用

3.服务端和客户端在同一个局域网的两台PC机

4.未压缩的字符串长度为65000,压缩之后长度为8400

测试结果:

结果:其实测试的结果很明显了,通过压缩数据来减少网络数据量的传输,确实可以提高速度。

五丶代码

 public class CompressionHelper
{
public static string Compress(string value)
{
string result = string.Empty;
try
{
byte[] buffer = Encoding.UTF8.GetBytes(value);
using (MemoryStream memoryStream = new MemoryStream())
{
using (DeflateStream deflateStream = new DeflateStream(memoryStream, CompressionMode.Compress, true))
{
deflateStream.Write(buffer, 0, buffer.Length);
}
result = Convert.ToBase64String(memoryStream.ToArray());
}
}
catch (InvalidDataException invalidData)
{
//Log21 }
catch (Exception exception)
{
//Log25 }
return result;
} public static string Decompress(string value)
{
string result = string.Empty;
try
{
byte[] bytes = Convert.FromBase64String(value);
using (MemoryStream outStream = new MemoryStream())
{
using (MemoryStream inStream = new MemoryStream(bytes))
{
using (DeflateStream deflateStream = new DeflateStream(inStream, CompressionMode.Decompress, true))
{
int readLength = 0;
byte[] buffer = new byte[1024];
while ((readLength = deflateStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, readLength);
}
}
}
result = Encoding.UTF8.GetString(outStream.ToArray());
}
}
catch (InvalidDataException invalidData)
{
//Log55 }
catch (Exception exception)
{
//Log59 }
return result;
}
 

Android和WCF通信 - 大数据压缩后传输的更多相关文章

  1. 学习之路三十五:Android和WCF通信 - 大数据压缩后传输

    最近一直在优化项目的性能,就在前几天找到了一些资料,终于有方案了,那就是压缩数据. 一丶前端和后端的压缩和解压缩流程 二丶优点和缺点 优点:①字符串的压缩率能够达到70%-80%左右 ②字符串数量更少 ...

  2. WCF大数据量传输解决方案

    文章内容列表:1. 场景:2. 解决方案3. WCF契约与服务实现设计静态图4. WCF契约与服务实现设计详细说明6. 服务端启动服务代码:7. 客户端代码8.   WCF大数据量传输解决方案源码下载 ...

  3. 大数据量传输时配置WCF的注意事项

    原文:大数据量传输时配置WCF的注意事项 WCF传输数据量的能力受到许多因素的制约,如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题,应注意以下配置: 1.MaxReceivedMe ...

  4. 解决WCF大数据量传输 ,System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接

    开发中所用的数据需要通过WCF进行数据传输,结果就遇到了WCF大量传输问题 也就是提示System.Net.Sockets.SocketException: 远程主机强迫关闭了一个现有的连接 网上解决 ...

  5. Android开发--Socket通信

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

  6. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...

  7. 系列文章--Silverlight与WCF通信

    Silverlight与WCF通信(一) :Silverlight通过httpBinding访问IIS宿主WCF 摘要: 首语本人在学习Silverlight 和 WCF的时候,各种问题层出不穷,在园 ...

  8. Android之Http通信——1.初识Http协议

    Android之Http通信--1.初识Http协议 引言: 今天是六一儿童节,先在这里给各位超龄儿童说声节日快乐哈~( ╯□╰ ),小猪也象征性地给群里的小朋友们派了红包-嗯,忙碌的五月最终过去了, ...

  9. Android访问WCF服务

    原文链接:http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 本章目的: 用Wcf建立可以上Android可以访问的数据服务, 数据 ...

随机推荐

  1. Apache与Nginx服务器对比

      apache NginX 占用资源和内存 多 轻量级,同样起Web服务,占内存和资源更少   阻塞型 抗并发,异步非阻塞的,高并发下,可保持低资源低消耗低性能   可用的模块超多 可自定义模块,编 ...

  2. Codeforces Round #121 (Div. 2)

    A. Funky Numbers 记\(a \le b\),枚举\(a\)即可. B. Walking in the Rain 二分时间,然后\(dp(i)\)表示是否能从1到达i. C. Dynas ...

  3. 三星Mega 6.3(i9200)删除kingroot

    关于kingroot实际效果怎么样,是不是流氓软件,我不做评论. 手机型号,三星galaxy mega 6.3(i9200)水货,更详细的机型不知道怎么看. 刷了官方的rom以后,下载了kingroo ...

  4. Windows Kernel Security Training Courses

    http://www.codemachine.com/courses.html#kerdbg Windows Kernel Internals for Security Researchers Thi ...

  5. Unity Meshes

    1. Unity 没有自带建模工具 2. 导入 Mesh 时,Unity 会自动寻找所引用的纹理,查找文件夹名为 Textures 的.先在本目录下找 -> 上溯在parent查找 ==> ...

  6. 类的扩展--类目和延展--ios

    person+money.h  这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money ...

  7. opsview

    nagios,cacti,opsview,prtg,zabbix http://www.opsview.com 1.需要注册一个账号,createyuan#sohu.com

  8. 【转载】写runat="server"有什么用

    aspx运行时会被编译,其中没有runat="server"属性的html标签会被直接写入response,有runat="server"属性的html标签会转 ...

  9. FROM_UNIXTIME 格式化MYSQL时间戳函数

    FROM_UNIXTIME 格式化MYSQL时间戳函数 对MYSQL没有进行过深入的研究,基础知识匮乏,一遇到问题只能手册,看来要把MYSQL的学习安排进时间表了. 函数:FROM_UNIXTIME作 ...

  10. HTML5服务器推送事件

    目前客户端(浏览器)和服务端交互大致有以下几种方式: 1)form表单提交方式,适合访问量不大,对用户体验要求不高的web系统开发,或者页面整体刷新无伤大雅的场合,通信方向是客户端提交给服务端,是客户 ...