string変数を""で初期化すると、メモリが解放されない為、値代入と、""による初期化を、数十万回繰り返すと、MemoryOverFlowが発生する。
""で初期化し、MemoryOverFlowが発生したソース。
int iRowCnt = 0;
string strRowData1000 = "";
string strRowData = "";
string strTmp = "";
foreach (DataGridViewRow row in grid.Rows)
{
strRowData = "";
for (int iCol = i開始列; iCol < row.Cells.Count; iCol++)
{
strRowData += "\"" + row.Cells[iCol].FormattedValue.ToString() + "\"";
if ((grid.Columns.Count - 1) > iCol)
{
strRowData += ",";
}
}
strTmp = strRowData.Replace(",", "").Replace("\"", "");
if (strTmp.Length == 0)
continue;
else
strRowData1000 += strRowData;
if (iRowCnt < 2000)
{
strRowData1000 += "\r\n";
iRowCnt++;
}
else
{
File.AppendAllText(str保存先ファイルパス, strRowData1000 + "\r\n", Encoding.GetEncoding("Shift_JIS"));
iRowCnt = 0;
strRowData1000 = "";
}
}
nullで初期化し、MemoryOverFlowが発生しなかったソース。
int iRowCnt = 0;
string strRowData1000 = "";
string strRowData = "";
string strTmp = "";
foreach (DataGridViewRow row in grid.Rows)
{
strRowData = "";
for (int iCol = i開始列; iCol < row.Cells.Count; iCol++)
{
strRowData += "\"" + row.Cells[iCol].FormattedValue.ToString() + "\"";
if ((grid.Columns.Count - 1) > iCol)
{
strRowData += ",";
}
}
strTmp = strRowData.Replace(",", "").Replace("\"", "");
if (strTmp.Length == 0)
continue;
else
strRowData1000 += strRowData;
if (iRowCnt < 2000)
{
strRowData1000 += "\r\n";
iRowCnt++;
}
else
{
File.AppendAllText(str保存先ファイルパス, strRowData1000 + "\r\n", Encoding.GetEncoding("Shift_JIS"));
iRowCnt = 0;
strRowData1000 = null;
}
}
最近のコメント