zoukankan      html  css  js  c++  java
  • 学习之路三十五:Android和WCF通信

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

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

       

    二丶优点和缺点

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

         ②字符串数量更少了

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

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

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

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

    四丶测试(简单的测试)

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

            2.500个线程同时调用

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

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

    测试结果:

     

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

     

    五丶代码

     1     public class CompressionHelper
     2     {
     3         public static string Compress(string value)
     4         {
     5             string result = string.Empty;
     6             try
     7             {
     8                 byte[] buffer = Encoding.UTF8.GetBytes(value);
     9                 using (MemoryStream memoryStream = new MemoryStream())
    10                 {
    11                     using (DeflateStream deflateStream = new DeflateStream(memoryStream, CompressionMode.Compress, true))
    12                     {
    13                         deflateStream.Write(buffer, 0, buffer.Length);
    14                     }
    15                     result = Convert.ToBase64String(memoryStream.ToArray());
    16                 }
    17             }
    18             catch (InvalidDataException invalidData)
    19             {
    20                 //Log21             }
    22             catch (Exception exception)
    23             {
    24                 //Log25             }
    26             return result;
    27         }
    28 
    29         public static string Decompress(string value)
    30         {
    31             string result = string.Empty;
    32             try
    33             {
    34                 byte[] bytes = Convert.FromBase64String(value);
    35                 using (MemoryStream outStream = new MemoryStream())
    36                 {
    37                     using (MemoryStream inStream = new MemoryStream(bytes))
    38                     {
    39                         using (DeflateStream deflateStream = new DeflateStream(inStream, CompressionMode.Decompress, true))
    40                         {
    41                             int readLength = 0;
    42                             byte[] buffer = new byte[1024];
    43                             while ((readLength = deflateStream.Read(buffer, 0, buffer.Length)) > 0)
    44                             {
    45                                 outStream.Write(buffer, 0, readLength);
    46                             }
    47                         }
    48                     }
    49                     result = Encoding.UTF8.GetString(outStream.ToArray());
    50                 }
    51             }
    52             catch (InvalidDataException invalidData)
    53             {
    54                //Log55             }
    56             catch (Exception exception)
    57             {
    58                //Log59             }
    60             return result;
    61         }
    62     }

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

  • 相关阅读:
    运维工程师的四个阶段
    必须知道的Linux内核常识详解
    Centos7/RHEL7 开启kdump
    sort实现ip排序
    如何判断是否开启超线程
    Django---进阶12
    Django---进阶11
    前端---进阶8
    前端---进阶7
    前端---进阶6
  • 原文地址:https://www.cnblogs.com/yangcaogui/p/3249978.html
Copyright © 2011-2022 走看看