C# 将csv文件复制到数据表时出现“System.OutOfMemoryException”
我用C语言开发了一个代码,可以将csv文件中的数据复制到数据表中。csv文件包含500万行,我逐行读取这些行以防止内存问题。我想知道为什么我仍然摆脱记忆异常。我添加了断点,以确保将正确的字符串复制到变量中,并且它们工作正常。有什么想法吗C# 将csv文件复制到数据表时出现“System.OutOfMemoryException”,c#,asp.net,csv,C#,Asp.net,Csv,我用C语言开发了一个代码,可以将csv文件中的数据复制到数据表中。csv文件包含500万行,我逐行读取这些行以防止内存问题。我想知道为什么我仍然摆脱记忆异常。我添加了断点,以确保将正确的字符串复制到变量中,并且它们工作正常。有什么想法吗 int first_row_flag = 0; //first row is column name and we dont need to import them string temp; foreach (var row
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列中的意外数据
以下是堆栈跟踪:
500万行,可能太多数据无法处理。它将取决于列数和值数。检查文件大小,然后将其与可用内存进行比较,以获得大致信息。关键是,有了这么多的数据,在大多数情况下,使用其他技术会导致内存不足异常 如果您保存记录以便以后可以在DB中插入数据,那么应该重新考虑DataTable的用法,然后以小批量处理数据 若您决定成批处理数据,那个么您甚至可以考虑根本不使用DataTable,而是使用List
另外,看看其他读取CSV文件的技术 您要同时将所有这些数据加载到数据表中吗?似乎这将占用大量内存…您仍在不断地添加到数据表中,我猜是一个数据表。如果您仍保留内存中的所有行,那么逐行读取这里的帮助到底是如何实现的?为什么这最终不会让您耗尽内存?如果你什么都不做,只输入而不取出,你最终会用完。我认为OP关心的是为什么要创建500万个空行,因为只有第一个空行被填满。很可能是由于使用32位进程来运行代码,请参阅。。。忽略创建数百万空行的实际价值…旁注:您确实知道列和值的数量-除了最多9行之外,所有行都是空的…: