【发布时间】:2014-03-17 20:58:30
【问题描述】:
我正在寻找使用 ColdFusion 或 Java 压缩许多大文件的最节省内存的方法。我尝试过使用<cfzip> 和 Nate Nielsen (http://farmancreative.com/womenskiteboarding/admin/dccom/components/dcFileManagerV3/actions/cfc/zip.cfc) 的 zip.cfc。对于测试,我压缩了一个目录,其中包含 80 个 mp4 文件,总计 1.18GB。结果如下。当<cfzip> 标签运行时,我完全看不出有什么区别,ColdFusion 的正常“步骤”似乎没有改变。但是zip.cfc 的内存使用量更大。
所以我的问题是,哪个结果更好?还是有另一种我不知道的更新方法比这两种方法更好?
我更关心内存使用而不是速度。但就速度而言,<cfzip> 稍微快一点。 <cfzip> 时间为 100,871。 zip.cfc 时间为 141,285。
谢谢!
<cfzip>测试代码:
<cfoutput>
<cfset tBegin = GetTickCount()>
<cfzip
action="zip"
source="#dir#"
file="#zipFile#"
storepath="false"
overwrite="true"
/>
<cfset tEnd = GetTickCount()>
<cfset scriptTime = (tEnd - tBegin)>
Script Time: #scriptTime#
</cfoutput>
zip.cfc测试代码:
<cfdirectory directory="#dir#" name="d" recurse="false">
<cfoutput>
<cfset tBegin = GetTickCount()>
<cfset zipper = createObject("component", "zip")>
<cfscript>zipper.newZip(zipFile);</cfscript>
<cfloop query="d">
<cfset zipper.addFile(dir&d.name)>
</cfloop>
<cfscript>zipper.createZip();</cfscript>
<cfset tEnd = GetTickCount()>
<cfset scriptTime = (tEnd - tBegin)>
Script Time: #scriptTime#
</cfoutput>
【问题讨论】:
-
呃,压缩 MPEG 文件?你真的获得了那么多空间吗?
-
不,没有,只是测试大文件,这就是我所拥有的。文件类型会有所不同吗?两个测试都是针对相同的文件运行的。我将收集大量文本文件和 pdf 文件并针对它们运行测试,看看会发生什么。我这里不测试压缩,主要看内存。
-
好吧,我无法解释为什么,但是是的,它会有所不同;尝试压缩“二进制”文件(因为没有更好的术语)比文本文件需要更长的时间。如果这些文件不是您最终将要使用的文件,您应该为自己构建一个代表集,以便测量更准确
-
只是实际查看了 zip.cfc 代码 - 函数和组件都没有
output=false,因此它会进行不必要的缓冲(这会减慢速度),并且没有 var作用域(所以它不是线程安全的)。代码的某些部分看起来也很可疑 - 我肯定会推荐不使用该 zip.cfc,即使在添加 cfzip 之前卡在某个 CF 版本上。 -
关闭空白管理并查看源代码。
标签: java memory coldfusion zip cfzip