使用cfimage和cfxml时防止内存泄漏?

时间:2012-08-24 12:20:13

标签: memory-leaks coldfusion cfimage

我正在coldfusion8/mysql 5.0.88中使用Jquery Mobile的前端做一个网站。我还使用了photoswipe.js插件,它允许在单独的视图层中缩放和浏览图像。

要设置可拍照的图像,我需要输出

<cfoutput>
<a class="swipeMe" rel="external" href="#variables.imageSrc#">
    <img src="#variables.imageSrc#" class="adaptImg ui-li-thumb" />
</a>
</cfoutput>

问题是imageSrc由用户提供,因此我必须在显示图像之前抓取/验证/调整图像大小并且我需要图片的路径以进行photoswipe-link。

我已经摆弄了一段时间,并提出了以下解决方案:

 // read img from user specs
 <cfimage name="myImage" source="#bildpfad##bilddateiname#" action="read" />
 <cfif IsImage(myImage) is true>
      // resize
      <cfscript>
           ImageSetAntialiasing(myImage,"on");
           variables.breite = 400;
           ImageScaleToFit(myImage, variables.breite,"", "highestPerformance");
      </cfscript>
      // write to xml, so I can get the path
      <cfxml variable="imageXml">
           <cfimage quality=".5" action="writetobrowser" source="#myImage#" class="adaptImg ui-li-thumb"/
      </cfxml>
      <cfset variables.imageSrc = imageXml.xmlRoot.xmlAttributes.src>
      // output
      <cfoutput>
         <a class="swipeMe" rel="external" href="#variables.imageSrc#">#imageXml#</a>
      </cfoutput>
 </cfif>

虽然这有效但它几乎会使应用程序失速并且内存似乎也会泄漏,因为我正在运行这个内存时会丢失越来越多的内存。

问题
上面的代码是否有任何明显的问题导致内存泄漏?我想这些图像被写入某种临时目录(CFFileservelet?​​)并在那里停留一段时间阻止我的记忆。如果是这样,在图像搜索中处理此问题的替代方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

为什么不在服务器上创建一个/ tmp文件夹,并在那里编写被操作的图像,如:

<cfset newImageName=CreateUUID()&".jpg">
<cfimage action="write" destination="/tmp/#newImageName#" source="#myImage#">

然后你可以使用它:

  <cfoutput>
     <a class="swipeMe" rel="external" href="/tmp/#newImageName#"><img src="/tmp/#newImageName#" class="..."></a>
  </cfoutput>

删除临时文件的示例计划任务:

<cfdirectory action="LIST" directory="#expandpath('tmp/')#" name="tempfiles" filter="*.jpg">
<cfloop query="tempfiles">
    <cfif dateadd('h',24,dateLastModified) lt now()>
        <cffile action="DELETE" file="#expandpath('tmp/')##name#">
    </cfif>
</cfloop>