嘗試生成某些HTML報告時,出現'System.OutOfMemoryException'。重構 - System.OutOfMemoryException
我該如何重新設定這個值,以便將其緩衝到文件中,而不是將其全部讀取到內存中,然後寫入文件。
數據表中會有超過2000多條記錄向上,並且已經有2000行的內存不足。
DetailsUpdateTemplate包含一個多行html代碼片段。我假設我正在創建一個很大的字符串。串聯次數超出屈指可數的字符串時
我使用C#,.NET 3.5
internal static String SaveARSUpdateHTML(DataTable table, string fileName)
{
int recordCount = table.Rows.Count;
Dictionary<String, object> templateCols = new Dictionary<string, object>();
templateCols["Track"] = table.TableName;
templateCols["ProdDate"] = DateTime.Now.ToShortDateString();
templateCols["ProdTime"] = DateTime.Now.ToShortTimeString();
templateCols["TotalRecords"] = recordCount;
String detailOutput = String.Empty;
for (int i = 0; i < table.Rows.Count; i++)
{
int ResultID = i + 1;
DataRow row = table.Rows[i];
String ReportDetails = DetailsUpdateTemplate;
ReportDetails = ReportDetails.Replace(String.Format("{{{0}}}", "ResultID"), ResultID.ToString());
foreach (DataColumn column in table.Columns)
{
String value = row[column.ColumnName].ToString();
if (column.ColumnName.Equals("TF"))
{
String display = value.Equals("no", StringComparison.CurrentCultureIgnoreCase) ? "none" : "block";
ReportDetails = ReportDetails.Replace(String.Format("{{{0}}}", "SuppressNewAddr"), display);
}
ReportDetails = ReportDetails.Replace(String.Format("{{{0}}}", column.ColumnName), value);
}
detailOutput += ReportDetails;
}
templateCols["ReportDetails"] = detailOutput;
String masterOut = MasterUpdateTemplate;
foreach (KeyValuePair<string, object> pair in templateCols)
{
masterOut = masterOut.Replace(String.Format("{{{0}}}", pair.Key), pair.Value.ToString());
}
String outputFile = String.Format("{0}.htm", fileName);
using (StreamWriter sw = new StreamWriter(outputFile))
{
sw.Write(masterOut);
}
return outputFile;
}
您沒有提供代碼的相關部分。所有這些代碼正在做的是修改內存中已經有**的一些數據以將其保存到文件中。 'DataTable'是內存中的。所以,而不是使用'DataTable'使用SqlDataReader並直接流到文件。 – 2010-06-22 21:21:27
我正在從一個不同的庫中傳遞一個DataTable。我無法改變輸入行爲。 – 2010-06-22 21:28:00