大規模なDataTableをExcelシート(.xls)形式にエクスポートしています。ここでは、DataTableを返すストアドプロシージャを呼び出します。ストアドプロシージャは、93の列を持つ750,000の行を返すために使用されました。大きなデータをxls形式にエクスポートする:システムがメモリ不足例外
バックエンドでは、ストアドプロシージャのパラメータを渡すと、プロセスが長いためプロセスを完了するのに8分かかります。
しかし、フロントエンドからプロシージャを呼び出すと、レコードをDataTableに割り当てているときに、 "System Out Of Memory"例外が発生します。
だから私はGoogleにそれを知ったときに、サイズがサーバーのRAMサイズを超えていることがわかったので、この例外がスローされます。 小さなDataTableをエクスポートすると正常に動作します。
これに代わる方法は何ですか?誰でも私を提案します。あなたはこの種の問題のためのDataTableを使用してはならない
DataTable dt = BindDatatable();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "MBQ_Auto.xls"));
Response.ContentType = "application/ms-excel";
//Response.ContentType = "application/octet-stream";
//Response.ContentType = "text/tab-separated-values";
string str = string.Empty;
foreach (DataColumn dtcol in dt.Columns)
{
Response.Write(str + dtcol.ColumnName);
str = "\t";
}
Response.Write("\n");
int rowCount = 0;
foreach (DataRow dr in dt.Rows)
{
str = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
Response.Write(str + Convert.ToString(dr[j]));
str = "\t";
}
Response.Write("\n");
if (unchecked(++rowCount % 1024 == 0))
Response.Flush();
}
Response.End();
サーバーメモリには大きすぎると、クライアントに何をするのでしょうか? (フィールドの1つにタブ文字が含まれているとどうなりますか?) – Richard
xlsファイル形式では65,000を超える行がサポートされています。より多くの行を使用するには、xlsxを使用する必要があります。 – Linkan
xlsを使用して2つ以上のlakhsレコードをエクスポートしています。 – thevan