编辑:我更改了名称,因为有一个类似的SO问题How do I fix SpreadSheetAddRows function crashing when adding a large query?那里描述了我的问题所以我更简洁地删除了...问题是我的查询结果的spreadsheetAddrows炸弹整个服务器在我的考虑一个中等大小(1600行,27列),但听起来比他的18,000行少得多
我正在使用通过coldfusion 9.0.1 cfstoredproc访问的oracle存储过程,在完成后创建一个供用户下载的电子表格
问题是结果集大于1200行正在返回500内部服务器错误,700行返回正常,所以我猜这是一个内存问题?
我收到的唯一消息除500以外标准coldfusion外观中的内部服务器错误是小写“超出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)#">
答案 0 :(得分:0)
我的答案在于coldfusion和一个简单的事实:不要使用SpreadsheetAddRows或任何相关的函数,如SpreadsheetFormatRows
我的解决办法是执行查询,创建一个xls文件,使用标签cfspreadsheet写入新创建的xls文件,然后提供给浏览器,服务后删除
使用SpreadsheetAddRows,Runtime从1000多行崩溃服务器,700行5 +分钟 使用上述方法1-1.5秒
如果您对更多代码感兴趣,我可以提供评论,我正在使用冷箱框架,所以不认为具体性将有助于新的工作流程