学习之路三十五:Android和WCF通信 - 大数据压缩后传输
2024-08-21 15:14:04
最近一直在优化项目的性能,就在前几天找到了一些资料,终于有方案了,那就是压缩数据。
一丶前端和后端的压缩和解压缩流程
二丶优点和缺点
优点:①字符串的压缩率能够达到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;
}
}
以同步至:个人文章目录索引
最新文章
- backbone新手填坑教程资源
- Java 8特性探究(1):通往lambda之路与 lambda表达式10个示例
- C#使用NPOI导出Excel表格
- mysql忘记密码重置(mac)
- win7下vs2010编译生成sqlite3.dll库
- C语言语法之占用字节
- 基于Emgu CV 的手势识别实现PPT的控制放映
- jQuery开发技术笔记
- 阿里云ECS每天一件事D9:nginx1.7整合tomcat8.0
- application(expand)--easyui
- scanf()常犯错误
- 全方位深度剖析--性能测试之LoardRunner 介绍
- facebook视频上传python 返回错误code:100,'type':OAuthException
- [日常] Go语言圣经-竞争条件习题
- sqlserver2008debug存储过程
- CSS2.1SPEC:视觉格式化模型之width属性详解(上)
- linux shell 正则表达式(BREs,EREs,PREs)差异比较(转)
- 1124 Raffle for Weibo Followers[简单]
- UNITY 画布的粗浅理解
- BZOJ2565:最长双回文串(Manacher)