スポンサーリンク

string変数はnullで初期化する

C#

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;
 }
}

コメント

タイトルとURLをコピーしました