我正在尝试改善我的一个报告的执行时间,该报告使用cfcharts打印图形。代码本身是一个实体循环,我为每个实体创建了一个图表(这是一个比较报告)。
由于报告的复杂性,通过内联完成它几乎需要一分钟或更长时间,所以我尝试在这种情况下使用cfthread,但我不确定这是否可行。
代码如下:
<body>
<cfloop array="#uuids#" index="uuid" >
<cfthread action="run" name="t#threadCount#" output="to#threadCount#">
...
<cfchart >
...
</cfchart>
</cfthread>
...
</cfloop>
</body>正如预期的那样,cfchart将不会在cfthread中“打印”,尽管它显然正在执行。如何获取cfthread的输出?一种可能的解决方案是从cfchart创建一个图像,然后在所有线程都完成时使用该图像构建文档,但我想知道是否有任何方法可以从cfthread获得cfchart输出。
发布于 2012-03-13 21:22:07
尝试在cfchart调用周围放置一个自定义标记,并将生成的内容捕获到一个变量中-然后使用线程作用域访问它。我不确定这是否会起作用(取决于你的输出格式)。
发布于 2012-03-13 21:46:40
我还没有测试过这一点,这只是一个想法,但您可以尝试将cfchart放入cfsavecontent块中。
发布于 2016-10-28 03:48:46
我能够使用cfsavecontent保存并生成带引号的cfcharts。
只需确保使用的任何查询/数据变量都保存在cfsavecontent块中(我在这一部分遇到了问题;如果你不小心,作用域就会有点不稳定)
<body>
<cfloop array="#uuids#" index="uuid" >
<cfthread action="run" name="t#threadCount#" output="to#threadCount#">
<cfsavecontent variable="thisContent">
<cfquery name="thisQuery" datasource="dsource">
...
</cfquery>
<cfchart >
...
</cfchart>
</cfsavecontent>
</cfthread>
...
</cfloop>
<cfloop array="#uuids#" index="uuid" >
<cfthread action="join" name="t#threadCount#"/>
#thisContent#
</cfloop>
</body>我遇到的问题是动态变量命名/调用。我确信这是一个非常容易解决的问题,但是如果我用我知道要创建的名称来调用每个内容,它就会显示出来--尽管这违背了使用动态变量的目的。但这完全是另一回事!答案是肯定的,您可以在cfthread中使用cfsavecontent和cfcharts。
https://stackoverflow.com/questions/9684351
复制相似问题