java - SpreadsheetAddRows 在中等大小的查询上失败

标签 java coldfusion jvm spreadsheet

编辑:我更改了名称,因为有一个类似的问题 How do I fix SpreadSheetAddRows function crashing when adding a large query?在那里描述了我的问题,所以我更简洁地进行了分述...问题是电子表格添加行我的查询结果以我认为适中的大小(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)#">

最佳答案

我的答案在于冷融合和一个简单的事实:不要使用 SpreadsheetAddRows 或任何相关函数,如 SpreadsheetFormatRows

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

使用 SpreadsheetAddRows,运行时在 1000 多行时服务器崩溃,在 700 行时运行时间超过 5 分钟 使用上述方法 1-1.5 秒

如果您对更多代码感兴趣,我可以提供评论,我正在使用冷盒框架,因此认为具体性不会对新工作流程有所帮助

关于java - SpreadsheetAddRows 在中等大小的查询上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928332/

相关文章:

ajax - 函数的参数是必需的,但未传入

hibernate - 使用 ORM 时如何向 CFC 添加数组属性?

variables - 创建动态命名变量

java - Sun JVM 如何将 Java 线程映射到 Windows 线程?

java - 为什么我不能以这种方式在静态方法中返回任何内容

java - 创建 Java 汽车类

java应用程序无法打开URL地址0.0.0.0

java - 使用 UseConcMarkSweepGC 减少 JVM 暂停时间 > 1 秒

java - 在 Windows 上 - 哪里有 mqji.properties 供我使用?

java - struts 2 中的数据库访问