DataGridViewに5万行を表示し、選択可能最大行数(5万行)を、現実的な処理時間で、CSVファイルとして保存するコードが出来た!
1.最初はStreamWriterクラスを用いたが、.Net framework のバグで、メモリを限界まで使用する現象が発生し、アプリケーションが必ずハングする。試行錯誤したが、StreamWriterクラスでは無理だった。
2.FileクラスのAppendAllTextを用いる事で、安定的にファイル書き込み処理が実行されるようになったが、書き込みが終わるまで数時間かかってしまう。
3.FileクラスのAppendAllTextを、1行単位に実行するのではなく、1000行単位に実行するようにしたら、2分程度で5万行のファイル書き込みが完了するようになった。
最終的に出来上がったソースはこちら。
using System.IO;
private static void Writeグリッド明細_Selected(string str保存先ファイルパス, DataGridView grid, int i開始列)
{
int iRowCnt = 0;
string strRowData = "";
foreach (DataGridViewRow row in grid.SelectedRows)
{
for (int iCol = i開始列; iCol < row.Cells.Count; iCol++)
{
strRowData += "\"" + row.Cells[iCol].FormattedValue.ToString() + "\"";
if ((grid.Columns.Count - 1) > iCol)
strRowData += ",";
}
string strTmp = strRowData.Replace(",", "").Replace("\"", "");
if (strTmp.Length == 0)
continue;
if (iRowCnt < 1000)
{
strRowData += "\r\n";
iRowCnt++;
}
else
{
File.AppendAllText(str保存先ファイルパス, strRowData + "\r\n", Encoding.GetEncoding("Shift_JIS"));
iRowCnt = 0;
strRowData = "";
}
}
if (strRowData != "")
File.AppendAllText(str保存先ファイルパス, strRowData + "\r\n", Encoding.GetEncoding("Shift_JIS"));
}
最近のコメント