编辑:我更改了名称,因为那里有一个类似的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框架,所以没想到这种特殊性只会帮助新的工作流程