1

編集:同様のSOの質問があるため、名前を変更しました大きなクエリを追加するときにSpreadSheetAddRows関数がクラッシュするのを修正するにはどうすればよいですか? 私の問題を説明しているので、より簡潔に言い表せます...問題は、クエリ結果のspreadsheetAddrowsであり、サーバー全体を適度なサイズ(1600行、27列)で爆撃しますが、それは彼の18,000行よりもかなり少ないように聞こえます

私は、coldfusion 9.0.1 cfstoredproc 経由でアクセスする Oracle ストアド プロシージャを使用しており、完了時にユーザーがダウンロードするスプレッドシートを作成します。

問題は、結果セットが 1200 行を超えると 500 内部サーバー エラーが返され、700 行が正常に返されるということです。メモリの問題だと思いますか?

標準的なコールドフュージョンの外観で 500 Internal server error 以外に受け取った唯一のメッセージは、小さな活字の「gc オーバーヘッド制限を超えました」であり、それはページの更新時に 1 回だけでした。これは、基盤となる 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)#">
4

1 に答える 1

0

私の答えはcoldfusionと1つの簡単な事実にあります.SpreadsheetAddRowsまたはSpreadsheetFormatRowsのような関連する関数は使用しないでください.

これに対する私の解決策は、クエリを実行し、xls ファイルを作成し、タグ cfspreadsheet を使用して新しく作成された xls ファイルに書き込み、次にブラウザーに提供し、提供後に削除することでした。

SpreadsheetAddRowsを使用すると、ランタイムは1000行以上でサーバーのクラッシュから抜け出し、700行で5分以上、上記の方法を使用すると1〜1.5秒

より多くのコードに興味がある場合は、コメントを提供できます。コールドボックス フレームワークを使用しているので、具体性が新しいワークフローだけに役立つとは思いませんでした

于 2013-04-11T19:05:05.337 に答える