string変数を””で初期化すると、メモリが解放されない為、値代入と、””による初期化を、数十万回繰り返すと、MemoryOverFlowが発生する。
“”で初期化し、MemoryOverFlowが発生したソース。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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が発生しなかったソース。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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; } } |
コメント