编辑:我更改了名称,因为那里有一个类似的SO问题How do I fix SpreadSheetAddRows function crashing when adding a large query?描述了我的问题,所以我更加简洁了...问题是电子表格Addrows,我的查询结果以我认为中等的大小轰炸了整个服务器( 1600行27列),但听起来比他的18,000行少得多

我正在使用通过Coldfusion 9.0.1 cfstoredproc访问的oracle存储过程,该存储过程在完成时会创建电子表格供用户下载

问题是结果集大于说的1200行返回500内部服务器错误,700行返回正常,所以我猜这是内存问题吗?

我在标准Coldfusion外观中收到的唯一消息不是500内部服务器错误,是小写“超出gc开销限制”,并且在页面刷新中仅出现一次,这是指底层Java JVM

我什至不知道如何去诊断

这是cfstoredproc和电子表格obj的结尾

 <!--- variables assigned correctly above --->
 <cfprocresult name="RC1">
 </cfstoredproc>

 <cfset sObj = spreadsheetNew("reconcile","yes")>
 <cfset SpreadsheetAddRow(sObj, "Column_1, ... , Column27")>

 <cfset SpreadsheetFormatRow(sObj, {bold=TRUE, alignment="center"}, 1)>

 <cfset spreadsheetAddRows(sObj, RC1)>
    <cfheader name="content-disposition" value="attachment; filename=report_#Dateformat(NOW(),"MMDDYYYY")#.xlsx">
 <cfcontent type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" variable="#spreadsheetReadBinary(sObj)#">

最佳答案

我的答案与Coldfusion和一个简单的事实有关:请勿使用SpreadsheetAddRows或SpreadsheetFormatRows之类的任何相关函数

我的解决方案是执行查询,创建一个xls文件,使用标签cfspreadsheet写入新创建的xls文件,然后投放到浏览器,投放后删除

使用SpreadsheetAddRows,运行时从崩溃的服务器上移出1000+行,在700行上5分钟以上
使用1-1.5秒以上概述的方法

如果您对更多代码感兴趣,我只能提供注释,我使用的是Coldbox框架,所以没想到这种特殊性只会帮助新的工作流程

09-27 21:29