C# 将csv文件复制到数据表时出现“System.OutOfMemoryException”

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

我用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 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行之外,所有行都是空的…: