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         }
     
  • 相关阅读:
    苹果常识
    Xcode相关路径
    iOS10 Xcode8问题汇总
    摇一摇
    手机端在线预览文件
    生成纯色色块
    django--没有整理,笔记
    httprunnermanager环境搭建 -----转
    httprunner---->最最基础小白笔记
    Oracle 多表联合删除?--转
  • 原文地址:https://www.cnblogs.com/zouhao/p/4807581.html
Copyright © 2011-2022 走看看