压缩速率追踪

2024-05-04 18:08
文章标签 压缩 追踪 速率

本文主要是介绍压缩速率追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Flash Player 11.3添加了一个压缩和解压ByteArray的新方法:LZMA算法。这个算法很有用,因为和现存的zlibdeflate算法相比,LZMA通常能压缩到更小的程度。但这会导致压缩速度减少多少呢?今天这篇文章就是为了找出这个问题的答案。

 

首先,如果你感兴趣的话,可以很容易切换到LZMA。所有你需要做的就是将CompressionAlgorithm.LZMA传递给ByteArray.compress或ByteArray.uncompress。当然你还需要建立好Flash Player 11.3,并且保证你的用户至少在使用这个版本。

 

至于你将得到的额外压缩,这取决于你要压缩的数据,但大约比gzip要好50%,可以有效地减少下载时间!因此,在压缩速率这篇文章的测试应用程序的基础上,我们通过下面的测试程序来看看LZMAzlibDeflate性能上的区别:

 

 

package
{import flash.display.*;import flash.utils.*;import flash.text.*;public class CompressionSpeedFollowup extends Sprite{private var logger:TextField = new TextField();private function row(...cols): void{logger.appendText(cols.join(",") + "");}public function CompressionSpeedFollowup(){logger.autoSize = TextFieldAutoSize.LEFT;addChild(logger);row("Size","deflate (compress)","zlib (compress)","LZMA (compress)","deflate (uncompress)","zlib (uncompress)","LZMA (compress)");runTests("1 KB", 1024, 1024);runTests("1 MB", 1024*1024, 1);}private function runTests(label:String, size:int, reps:int): void{var beforeTime:int;var afterTime:int;var emptyTime:int;var deflateTimeCompress:int;var zlibTimeCompress:int;var lzmaTimeCompress:int;var deflateTimeUncompress:int;var zlibTimeUncompress:int;var lzmaTimeUncompress:int;var bytes:ByteArray = new ByteArray();var originalBytes:ByteArray = new ByteArray();var compressedBytes:ByteArray = new ByteArray();var i:int;var zlib:String = CompressionAlgorithm.ZLIB;var deflate:String = CompressionAlgorithm.DEFLATE;var lzma:String = CompressionAlgorithm.LZMA;fillBytes(originalBytes, size);// EmptybeforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);}afterTime = getTimer();emptyTime = afterTime - beforeTime;// CompressbeforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);bytes.compress(deflate);}afterTime = getTimer();deflateTimeCompress = afterTime - beforeTime - emptyTime;beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);bytes.compress(zlib);}afterTime = getTimer();zlibTimeCompress = afterTime - beforeTime - emptyTime;beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(originalBytes, bytes);bytes.compress(lzma);}afterTime = getTimer();lzmaTimeCompress = afterTime - beforeTime - emptyTime;// UncompresscopyBytes(originalBytes, compressedBytes);compressedBytes.compress(deflate);beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(compressedBytes, bytes);bytes.uncompress(deflate);}afterTime = getTimer();deflateTimeUncompress = afterTime - beforeTime - emptyTime;copyBytes(originalBytes, compressedBytes);compressedBytes.compress(zlib);beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(compressedBytes, bytes);bytes.uncompress(zlib);}afterTime = getTimer();zlibTimeUncompress = afterTime - beforeTime - emptyTime;copyBytes(originalBytes, compressedBytes);compressedBytes.compress(lzma);beforeTime = getTimer();for (i = 0; i < reps; ++i){copyBytes(compressedBytes, bytes);bytes.uncompress(lzma);}afterTime = getTimer();lzmaTimeUncompress = afterTime - beforeTime - emptyTime;row(label,deflateTimeCompress,zlibTimeCompress,lzmaTimeCompress,deflateTimeUncompress,zlibTimeUncompress,lzmaTimeUncompress);}private function fillBytes(bytes:ByteArray, size:int): void{bytes.length = 0;bytes.position = 0;for (var i:int; i < size; ++i){bytes.writeByte(Math.random()*256);}bytes.position = 0;}private function copyBytes(bytes:ByteArray, into:ByteArray): void{bytes.position = 0;into.position = 0;into.length = 0;into.writeBytes(bytes);bytes.position = 0;into.position = 0;}}
}

 

我是在以下环境中运行的测试应用程序:

 

· Flex SDK(MXMLC4.6.0.23201,在发布模式下编译(没有调试或冗长的堆栈跟踪)

· Flash Player 11.4.402.287

· 2.3 GHz的英特尔酷睿i7处理器

· Mac OS X 10.8.2

 

下面是我得到的结果:(最下面的LZMA标签改为LZMAuncompress)) 



 

正如图中所描述的,LZMA的压缩和解压速率要比zlibDeflate慢很多。大约压缩慢了28倍,解压慢了16倍,至少我使用的随机测试数据是这样。然而,与大多数编程任务一样,这里还是有个权衡的。如果你需要提高下载速度的话,你现在就可以使用LZMA压缩,但下载之后就要花费额外的处理能力来解压。这可能是你愿意做的一个权衡了,但你一定要注意上面的结果:你的CPU将遇到麻烦了!

这篇关于压缩速率追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959795

相关文章

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

通用内存快照裁剪压缩库Tailor介绍及源码分析(一)

背景 我们知道内存快照是治理 OOM 问题及其他类型的内存问题的重要数据源,内存快照中保存了进程虚拟机的完整的堆内存数据,很多时候也是调查其他类型异常的重要参考。但是dump出来的堆转储文件.hprof往往很大,以 LargeHeap 应用为例,其 OOM 时的内存快照大小通常在512M左右,要有效的存储和获取都是一个问题。 线下拿到hprof文件相对容易,也可以预防OOM,但覆盖的场景十分有

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩 目录 前言 一、特征值分解 二、应用特征值分解对图片进行压缩 三、矩阵的奇异值分解 四、应用奇异值分解对图片进行压缩 五、MATLAB仿真代码 前言         学习了特征值分解和奇异值分解相关知识,发现其可以用于图片压缩,但网上没有找到相应代码,本文在学习了之后编写出了图片压缩的代码,发现奇异值分

Oracle高级压缩和透明数据加密组合实验

本文参考了实验DB Security - Advanced Compression with Transparent Data Encryption(TDE),其申请地址在这里。 本文只使用了实验中关于高级压缩和在线重定义的部分。并对要点进行说明及对实验进行了简化。 准备:环境设置 原文中的实验环境实际上是改自Oracle示例Sample Schema,其实唯一的改动就是去掉了SALES表中

SpringCloud之Sleuth(Micrometer)+ZipKin分布式链路追踪

(学习笔记) 1、分布式链路追踪概述 问题:在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。 在分布式与微服务场景下,我们需要解决如下问题:   在大规模分布式与微服务集群下,如何实时观测系统的整体调用链路情况。

钓鱼邮件真相追踪:XDR见招拆招!

钓鱼陷阱,财富“蒸发” 如果一家规模5000人、业务遍布全球的企业之中有一位员工不小心点进了一个钓鱼邮件,会发生什么……?终端失陷?数据泄露?失去客户信任? 最让人破碎的当然是……核心资产泄露,钱没了!! 人有失手,"鱼"有逃命 某大型零售企业财务部门小张收到一封看似来自公司财务部的邮件,由于内容与其实际工作情况相符,小张打开了邮件中的附件,并点击了附件里的下载链接

hadoop平台gz、lzo压缩对比

压缩比: rcfile:             1.04 rcfile+snappy:      0.27 rcfile+lzo:         0.25 sequencefile:       0.83 sequencefile+snappy:0.84 sequencefile+lzo:   0.79 单列读取速度: select count(distinct product_no) rc

图片识别 中图片压缩和放大算法,最近邻插值,双线性插值

由于在神经网络中,输入的张量大小必须相同,但是图片大小不一定相同,我们需要对图片进行压缩和放大。     图像的缩放很好理解,就是图像的放大和缩小。传统的绘画工具中,有一种叫做“放大尺”的绘画工具,画家常用它来放大图画。当然,在计算机上,我们不 再需要用放大尺去放大或缩小图像了,把这个工作交给程序来完成就可以了。下面就来讲讲计算机怎么来放大缩小图象;在本文中,我们所说的图像都是指点阵图, 也