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

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

  

二丶优点和缺点

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

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

学习之路三十五:Android和WCF通信 - 大数据压缩后传输的更多相关文章

  1. Android和WCF通信 - 大数据压缩后传输

    Android和WCF通信 - 大数据压缩后传输 本帖来源:http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html 最近一直在优化项目 ...

  2. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  3. Dynamic CRM 2013学习笔记(三十五)自定义审批流6 - 审批通过后,再审批 - 二次审批

    最近有个特殊的需求,客户想做二次审批,就是审批通过后,再走一次审批流程.最开始一想,这还不简单,审批通过后,直接把状态改成draft就完了,后来一试,发现一堆问题,比如第一次审批完后,界面是不允许修改 ...

  4. 学习之路三十二:VS调试的简单技巧

    这段时间园子里讲了一些关于VS的快捷键以及一些配置技巧,挺好的,大家一起学习,一起进步. 这段时间重点看了一下关于VS调试技巧方面的书,在此记录一下学习的内容吧,主要还是一些比较浅显的知识. 1. 调 ...

  5. JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  6. 嵌入式Linux驱动学习之路(二十五)虚拟网卡驱动程序

    一.协议栈层次对比 设备无关层到驱动层的体系结构 1).网络协议接口层向网络层协议提供提供统一的数据包收发接口,不论上层协议为ARP还是IP,都通过dev_queue_xmit()函数发送数据,并通过 ...

  7. 学习之路三十八:Hook(钩子)的学习

    好久没写文章了,还记得年前面试了一家公司,为了检测一下我的学习能力,给了我一个任务,做一个自动登录并自动操作菜单的程序. 花了几天的时间研究了Hook以及使用WindowsAPI操作程序的知识,现在记 ...

  8. 学习之路三十六:SQL知识总结 - [游标||字符串分割]

    好久没有写文章了,今天把前不久项目用到的SQL知识总结一下. 一丶字符串分割 SQL内置函数中是没有Split分割函数的,所以需要自己去实现,不多说,上代码: )) RETURNS @result T ...

  9. [ExtJS5学习笔记]第三十五节 sencha extjs 5 组件查询方法总结

    一个UI前台组件肯定会比较多,我们通常习惯性的使用ID来获取需要操作的组件,但是这种方法是extjs推荐的么?有没有extjs推荐使用的获取组件的方法呢? 目录 目录 extjs的查询组件的API 查 ...

随机推荐

  1. Unity3d游戏场景优化杂谈(4)

    首先介绍下draw call(这个东西越少你的游戏跑的越快): 在游戏中每一个被展示的独立的部分都被放在了一个特别的包中,我们称之为“描绘指令”(draw call),然后这个包传递到3D部分在屏幕上 ...

  2. 中科院分词ICTCLAS导入用户词典后分词结果一样?

    package ICTCLAS.I3S.Test; import java.io.UnsupportedEncodingException; import ICTCLAS.I3S.AC.ICTCLAS ...

  3. Linux_文件及文件夹[创建][复制][移动][删除][重命名]

    一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语   法: touch [-acfm][-d <日期时间>][-r <参考文件或目 录&g ...

  4. July 29th, Week 31st Friday, 2016

    I am a slow walker, but I never walk backwards. 我走得很慢,但我从来不会后退. I had run very fast, and I had once ...

  5. scapy 安装及简单测试

    关于scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一些典型操作,比如 ...

  6. LIKE 某个变量

    declare i ); n number; begin i:='%D0FC02EAR11005%'; select po_header_id into n from po_headers_all w ...

  7. js九九乘法表

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  8. iOS开发——实战总结OC篇&amp;网易彩票开发知识点总结

    网易彩票开发知识点总结 关于网易彩票开发中遇到了不少的坑,弄了好久才弄懂,或者有些犹豫很久没用就不记得了,所以这里就总结了一下,希望以后不会忘记,就算忘记也能快速查看! /************** ...

  9. Smarty模板中调用PHP函数

    因为应用需要,要在Smarty中调用PHP函数,实现办法如下:模板 数据条数:{$data|count} 活动页面文件后缀:{$page|substr:'-3'} 特殊情况:{$page|str_re ...

  10. MSSQLSERVER数据库- 上移和下移的存储过程

    做一下备忘 MOVEUP: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[Proc_MoveUp] @id ...