C# 分块读取csv文件以进行处理

C# 分块读取csv文件以进行处理,c#,.net,csv,c#-3.0,c#-2.0,C#,.net,Csv,C# 3.0,C# 2.0,我有一个.csv文件,有10万条记录,其中有五列。我正在逐行读取它,并将其存储在远程数据库中 以前,我采用的是面向性能的方法。我逐行读取.csv文件,在同一个事务中,我打开并关闭与数据库的连接。这会带来严重的性能开销。 仅仅写一万行就花了一个小时 using (FileStream reader = File.OpenRead(@"C:\Data.csv")) using (TextFieldParser parser = new TextFieldParser(rea

我有一个.csv文件,有10万条记录,其中有五列。我正在逐行读取它,并将其存储在远程数据库中

以前,我采用的是面向性能的方法。我逐行读取.csv文件,在同一个事务中,我打开并关闭与数据库的连接。这会带来严重的性能开销。 仅仅写一万行就花了一个小时

using (FileStream reader = File.OpenRead(@"C:\Data.csv")) 
            using (TextFieldParser parser = new TextFieldParser(reader))
            {
                parser.TrimWhiteSpace = true; // if you want
                parser.Delimiters = new[] { " " };
                parser.HasFieldsEnclosedInQuotes = true;

                while (!parser.EndOfData)
                {
                    //Open a connection to a database 
                    //Write the data from the .csv file line by line
                    //Close the connection
                 }
             }
现在我改变了方法。出于测试目的,我获取了一个包含10000行的.csv文件,在读取了所有10000行之后,我正在与数据库建立一个连接并将其写入其中

现在,唯一的问题是: 我想先读10000行再写,同样地,再读10000行再写

using (FileStream reader = File.OpenRead(@"C:\Data.csv")) 
                using (TextFieldParser parser = new TextFieldParser(reader))
但是上面的两行将读取整个文件。我不想把它读完。
有没有办法一块一块地读取.csv文件,每块10000行?

试试下面的代码,它会一块地从csv文件中读取数据

 IEnumerable<DataTable> GetFileData(string sourceFileFullName)
    {            

        int chunkRowCount = 0;

        using (var sr = new StreamReader(sourceFileFullName))
        {
            string line = null;
            //Read and display lines from the file until the end of the file is reached.                
            while ((line = sr.ReadLine()) != null)
            {                                                  
               chunkRowCount++;
               var chunkDataTable = ; ////Code for filling datatable or whatever   

                if (chunkRowCount == 10000)
                {
                    chunkRowCount = 0;
                    yield return chunkDataTable;
                    chunkDataTable = null;
                }
            }
        }
        //return last set of data which less then chunk size
        if (null != chunkDataTable)                           
            yield return chunkDataTable;            
    }
IEnumerable GetFileData(字符串sourceFileFullName)
{            
int chunkRowCount=0;
使用(var sr=newstreamreader(sourceFileFullName))
{
字符串行=null;
//读取并显示文件中的行,直到到达文件末尾。
而((line=sr.ReadLine())!=null)
{                                                  
chunkRowCount++;
var chunkDataTable=;///用于填充数据表或其他内容的代码
如果(chunkRowCount==10000)
{
chunkRowCount=0;
收益率数据表;
chunkDataTable=null;
}
}
}
//返回小于块大小的最后一组数据
if(null!=chunkDataTable)
收益率数据表;
}