【问题标题】:most efficient way to zip files using coldfusion or java使用 Coldfusion 或 java 压缩文件的最有效方法
【发布时间】: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


【解决方案1】:

我必须跑步,所以现在不能打字,但明天会回来。这是我针对真实世界文件类型(.txt、.ppt、.doc、.swf 等)运行它后的测试结果。看起来&lt;cfzip&gt;zip.cfc. 好很多

【讨论】:

  • 我在使用 CFZip 和 Windows 时遇到了一些性能问题。我转而使用 CFExecute 和 7Zip,而不是使用 java 花费 30 秒到 5 分钟。 7-zip.org 7Zip 更健壮(即支持更多存档类型,完成后自动删除源文件)。在前端,我执行 ajax 请求以确定最终 ZIP 文件是否存在,然后再强制下载。由于这样做,我们的应用程序服务器变得更加稳定。
猜你喜欢
  • 1970-01-01
  • 2015-02-14
  • 2014-11-09
  • 2012-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2015-11-28
相关资源
最近更新 更多