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

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

  

二丶优点和缺点

  优点:①字符串的压缩率能够达到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, , buffer.Length);
}
result = Convert.ToBase64String(memoryStream.ToArray());
}
}
catch (InvalidDataException invalidData)
{
//Log }
catch (Exception exception)
{
//Log }
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 = ;
byte[] buffer = new byte[];
while ((readLength = deflateStream.Read(buffer, , buffer.Length)) > )
{
outStream.Write(buffer, , readLength);
}
}
}
result = Encoding.UTF8.GetString(outStream.ToArray());
}
}
catch (InvalidDataException invalidData)
{
//Log }
catch (Exception exception)
{
//Log }
return result;
}
}

以同步至:个人文章目录索引

最新文章

  1. backbone新手填坑教程资源
  2. Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
  3. C#使用NPOI导出Excel表格
  4. mysql忘记密码重置(mac)
  5. win7下vs2010编译生成sqlite3.dll库
  6. C语言语法之占用字节
  7. 基于Emgu CV 的手势识别实现PPT的控制放映
  8. jQuery开发技术笔记
  9. 阿里云ECS每天一件事D9:nginx1.7整合tomcat8.0
  10. application(expand)--easyui
  11. scanf()常犯错误
  12. 全方位深度剖析--性能测试之LoardRunner 介绍
  13. facebook视频上传python 返回错误code:100,'type':OAuthException
  14. [日常] Go语言圣经-竞争条件习题
  15. sqlserver2008debug存储过程
  16. CSS2.1SPEC:视觉格式化模型之width属性详解(上)
  17. linux shell 正则表达式(BREs,EREs,PREs)差异比较(转)
  18. 1124 Raffle for Weibo Followers[简单]
  19. UNITY 画布的粗浅理解
  20. BZOJ2565:最长双回文串(Manacher)

热门文章

  1. 恶意IP远程登录Linux服务器脚本
  2. Linux查看BIOS信息
  3. 如何利用ZBrush中的DynaMesh创建身体(二)
  4. [转载]ExtJs4 笔记(7) Ext.tip.ToolTip 提示
  5. SSH框架总结(框架分析+环境搭建+实例源码下载) 《转》
  6. 定制你的Unity编辑器
  7. php遇上iis之上传突破
  8. Eclipse发布地址不同引发的问题
  9. Xcode视图调试
  10. 【转】【PNG压缩工具】PNG 图像的优化及压缩工具介绍