- 浏览: 599669 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
wzh051527:
我是大四实习生一个,自我感觉技术能力在第三年。。唯一不明白,为 ...
十年技术,不要再迷茫 -
room_bb:
.hrl文件怎么加入到编译规则里面?比如:pp.hrl文件-d ...
Erlang中用的makefile的一点解释 -
吉米家:
感觉帆软报表的flash打印就很不错哇,特别好用
JSP 实现报表打印 -
雪碧爱芬达:
苦逼程序员的辛酸反省与总结 -
mlyjxx:
...
十年技术,不要再迷茫
Flash Player 11.3添加了一个压缩和解压ByteArray的新方法:LZMA算法。这个算法很有用,因为和现存的zlib和deflate算法相比,LZMA通常能压缩到更小的程度。但这会导致压缩速度减少多少呢?今天这篇文章就是为了找出这个问题的答案。
首先,如果你感兴趣的话,可以很容易切换到LZMA。所有你需要做的就是将CompressionAlgorithm.LZMA传递给ByteArray.compress或ByteArray.uncompress。当然你还需要建立好Flash Player 11.3,并且保证你的用户至少在使用这个版本。
至于你将得到的额外压缩,这取决于你要压缩的数据,但大约比gzip要好50%,可以有效地减少下载时间!因此,在压缩速率这篇文章的测试应用程序的基础上,我们通过下面的测试程序来看看LZMA与zlib和Deflate性能上的区别:
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); // Empty beforeTime = getTimer(); for (i = 0; i < reps; ++i) { copyBytes(originalBytes, bytes); } afterTime = getTimer(); emptyTime = afterTime - beforeTime; // Compress beforeTime = 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; // Uncompress copyBytes(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(MXMLC)4.6.0.23201,在发布模式下编译(没有调试或冗长的堆栈跟踪)
· Flash Player 11.4.402.287
· 2.3 GHz的英特尔酷睿i7处理器
· Mac OS X 10.8.2
下面是我得到的结果:(最下面的LZMA标签改为LZMA(uncompress))

正如图中所描述的,LZMA的压缩和解压速率要比zlib和Deflate慢很多。大约压缩慢了28倍,解压慢了16倍,至少我使用的随机测试数据是这样。然而,与大多数编程任务一样,这里还是有个权衡的。如果你需要提高下载速度的话,你现在就可以使用LZMA压缩,但下载之后就要花费额外的处理能力来解压。这可能是你愿意做的一个权衡了,但你一定要注意上面的结果:你的CPU将遇到麻烦了!
发表评论
-
as3 Loader 加载资源后内存泄露无法释放的问题。
2014-06-21 10:30 691as3 Loader 加载资源后内存泄露无法释放的问题。 ... -
as3判断flash player版本的函数
2014-06-10 20:35 853//判断当前版本是否高于9.0.115.0为例子. pr ... -
CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
2014-04-03 15:25 1057华文细黑:STHeiti Light [STXihei]华文 ... -
as3.0的垃圾回收机制
2013-09-07 14:02 1549还是同样的博客,还是同样的作者(Daniel Sidhio ... -
AIR程序多开
2013-09-07 13:55 1016AIR应用通常不能像QQ那样能进行多开操作。为了让一个用AI ... -
starling性能优化总结
2013-07-22 14:06 1483在项目开发的过程中总结了一下starling的性能优化方案: ... -
AS3 Socket从零开始
2013-07-22 12:54 1115大家如果想学AS3 Socket直接在百度里搜一下,会找到很 ... -
绕开AS3安全沙箱 跨域加载SWF
2013-07-11 12:53 923AS3的安全沙箱的确是 ... -
解决AS3在ie中初始化时stageWidth和stageHeight为0
2013-06-14 09:23 1037先看下面的一段脚本,这是比较经典的初始化脚本: pac ... -
动态获取swc中的类
2013-05-25 10:32 985想通过代码生成,来获取swc中的类,并且可以作为普通类正常使 ... -
AS3 中字符串的format功能实现
2013-05-25 10:19 848使用C#的朋友都知道,string.Format();还是挺 ... -
总结调用Flash的几种方法
2013-05-02 16:18 1684一、Adobe 提供的方法 <object wi ... -
Flash3D错误集锦
2013-05-02 14:03 952VerifyError: Error #1014: 无法找到 ... -
使用scale拉伸之后的坐标问题
2013-04-12 09:38 1308最近发现论坛多了很多 ... -
30个实用的网页设计工具
2013-03-20 09:58 843作为一位网页设计师或开发者,你一直需要搜寻获取强大的网页设计 ... -
如何成为强大的程序员?
2013-03-11 11:27 736Aaron Stannard是新创公 ... -
漫谈重构
2013-03-11 11:09 886因为工作内容的原因, ... -
AS3使用谷歌API生成二维码
2012-12-10 16:24 1373二维码在新闻杂志,网站,网络广告,电视广告等地方随处可见 ... -
OOP的聚合原则
2012-12-10 16:21 940什么是聚合? 聚合可以很好地表达对象是什么和做 ... -
SWF文件格式说明书--SWF文件头
2012-10-11 16:51 1245SWF文件头 字段 类型 ...
相关推荐
压缩传感(Compressed Sensing, CS)是一种革命性的信号处理技术,它打破了传统的采样理论,允许以低于奈奎斯特定理所规定的速率对信号进行采样,然后重构原始信号。正交匹配追踪(Orthogonal Matching Pursuit, OMP...
【压缩传感小波变换正交匹配追踪】是一种在信号处理领域广泛应用的技术,它结合了压缩传感(Compressed Sensing, CS)理论与正交匹配追踪(Orthogonal Matching Pursuit, OMP)算法,用于高效地重构离散信号。...
描述中提到,"图像压缩感知中采用正交匹配追踪算法回复图像",这意味着在图像数据采集阶段,图像被以低于传统奈奎斯特定理要求的速率进行采样,然后在解码端,使用OMP算法从这些不完全的测量数据中恢复图像。...
《理解与实现:压缩感知与正交匹配追踪(OMP)算法》 压缩感知(Compressed Sensing, CS)是近年来在信号处理领域兴起的一种革命性理论,它改变了传统的采样理论,允许信号以远低于奈奎斯特定理要求的速率进行采样,...
在信息技术领域,压缩感知(Compressed Sensing, CS)是一种突破传统的采样理论的技术,它允许我们以低于奈奎斯特定理所规定的速率对信号进行采样,然后重构原始信号。压缩感知的核心思想是利用信号的稀疏性,即信号...
压缩感知理论是21世纪初提出的一种革命性的信号处理概念,它改变了传统的采样理论,使得信号可以在远低于奈奎斯特定理所规定的速率下进行采样,并能够恢复原始信号。 正交匹配追踪算法是用于重构稀疏信号的一种迭代...
1-D信号压缩传感利用信号的稀疏性,以远低于奈奎斯特定理所规定的速率进行采样,但仍能重构原始信号。正交匹配追踪法(Orthogonal Matching Pursuit, OMP)是实现压缩传感的一种常用算法,具有计算效率高、易于实现...
本文将深入探讨标题所提及的“基于块结构自适应压缩采样匹配追踪算法的大规模MIMO系统信道估计方法”。首先,我们需要理解几个基本概念。 **大规模MIMO(Multiple-Input Multiple-Output)系统**: 大规模MIMO是指...
在信号处理领域,压缩传感(Compressive Sensing, CS)是一种新兴的技术,它允许我们以远低于奈奎斯特定理所规定的速率对信号进行采样,但仍能重构原始信号。正交匹配追踪法(Orthogonal Matching Pursuit, OMP)是...
然而,压缩感知允许我们以低于奈奎斯特速率的方式采样,前提是信号在某种变换域内是稀疏的。 **二、正交匹配追踪法(OMP)** OMP是压缩感知中的一种迭代重建算法,其工作原理类似于匹配追踪(Matching Pursuit)。...
首先,压缩感知(CS)理论的核心思想是,对于稀疏或可稀疏表示的信号,可以在远低于奈奎斯特定理所规定的速率下进行采样,然后通过有效的重构算法恢复原始信号。这里的“稀疏”指的是信号在某个基下的表示大部分元素...
压缩感知(Compressive Sensing, CS)是一种新兴的数据采集和处理技术,它突破了传统的Nyquist采样理论限制,允许在远低于信号带宽的速率下对稀疏或可压缩信号进行有效采样和重建。在压缩感知框架下,信号检测任务...
压缩感知(Compressed Sensing, CS)是一种信号处理理论,它打破了传统的奈奎斯特定理,允许以远低于奈奎斯特定理规定的速率进行信号采样,仍能重构原始信号。该理论的关键在于信号的稀疏性,即信号可以表示为少数几...
2. 无线通信:在无线通信系统中,压缩感知可以降低采样速率,减少硬件成本和功耗,同时提高频谱利用率。 3. 医学成像:在MRI(磁共振成像)和CT(计算机断层扫描)等医学成像技术中,稀疏分解和压缩感知可以缩短...
压缩感知(Compressive Sensing, CS)是一种突破传统采样理论的新型信号处理技术,它允许我们以远低于奈奎斯特定理所要求的速率对信号进行采样,然后通过特定的算法恢复原始信号。这一领域的研究对于图像处理、数据...
压缩感知(Compressive Sensing,CS)是一种革命性的信号处理技术,它打破了传统的采样理论,允许以远低于奈奎斯特定理所规定的速率对信号进行采样,并能重构原始信号。这一领域的研究主要集中在数学、信息论和...
OMP(Orthogonal Matching Pursuit,正交匹配追踪)算法是BCS中常用的一种重构方法。OMP通过迭代的方式寻找最相关的基向量,逐步构建信号的近似表示。在分块场景下,每个块的信号被看作一个独立的稀疏向量,OMP算法...