zoukankan      html  css  js  c++  java
  • Android和WCF通信

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

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

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

       

    二丶优点和缺点

      优点:①字符串的压缩率能够达到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             }
    21             catch (Exception exception)
    22             {
    23                 //Log25             }
    24             return result;
    25         }
    26 
    27         public static string Decompress(string value)
    28         {
    29             string result = string.Empty;
    30             try
    31             {
    32                 byte[] bytes = Convert.FromBase64String(value);
    33                 using (MemoryStream outStream = new MemoryStream())
    34                 {
    35                     using (MemoryStream inStream = new MemoryStream(bytes))
    36                     {
    37                         using (DeflateStream deflateStream = new DeflateStream(inStream, CompressionMode.Decompress, true))
    38                         {
    39                             int readLength = 0;
    40                             byte[] buffer = new byte[1024];
    41                             while ((readLength = deflateStream.Read(buffer, 0, buffer.Length)) > 0)
    42                             {
    43                                 outStream.Write(buffer, 0, readLength);
    44                             }
    45                         }
    46                     }
    47                     result = Encoding.UTF8.GetString(outStream.ToArray());
    48                 }
    49             }
    50             catch (InvalidDataException invalidData)
    51             {
    52                //Log55             }
    53             catch (Exception exception)
    54             {
    55                //Log59             }
    56             return result;
    57         }
     
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/zouhao/p/4807581.html
Copyright © 2011-2022 走看看