我在C#中开发了一个代码,用于将数据从csv文件复制到数据表。 csv文件包含5百万行,我逐行读取行以防止内存问题。我想知道为什么我仍然得到OutOfMemory Exception。我添加了breakPoints以确保将正确的字符串复制到我的变量并且它们正常工作。有什么想法吗?
int first_row_flag = 0; //first row is column name and we dont need to import them
string temp;
foreach (var row in File.ReadLines(path3))
{
if (!string.IsNullOrEmpty(row))
{
int i = 0;
if (first_row_flag != 0)
{
dt.Rows.Add();
foreach (string cell in row.Split(','))
{
if (i < 9)
{
temp = cell.Replace("\n", "");
temp = temp.Replace("\r", "");
dt.Rows[dt.Rows.Count - 1][i] = temp;
i++;
}
}
}
else
{
first_row_flag++; //get rid of first row
}
}
}
每行中的列数为9.这就是为什么我使用i来确保我不会在第10列中读取意外数据。
这是堆栈跟踪:
答案 0 :(得分:2)
500万行,可能需要处理太多数据。 (它将取决于列数和值)。检查文件大小,然后将其与可用于大致想法的内存进行比较。关键是,在这么多数据的情况下,大部分时间都会出现内存异常以及其他技术。
您应该重新考虑DataTable
的使用情况,如果您持有记录以便以后可以在数据库中插入,那么可以小批量处理您的数据。
如果您决定批量处理数据,那么您甚至可以考虑不使用DataTable
,而是使用List<T>
。
另外,请查看其他读取CSV文件的技巧。 Reading CSV files using C#