C#解析大型平面文件数据并插入数据库

时间:2013-01-23 08:25:42

标签: c#

我的平面文件大小> 1GB。我需要解析文件并插入DB。

方法1:    解析并将flatfile转换为csv。   然后在sql中使用批量插入。

问题:

使用async进行文件读取,我被抛出System.OutOfMemoryException

这需要将近30分钟(取决于大小)。

我是否需要有效利用数据结构来减少时间或任何其他有效的方法?

2 个答案:

答案 0 :(得分:1)

或许查看question here。具体来说,如果您使用的是.Net 4.0,则会提到MemoryMappedFile的使用。

但是,如果您只想将其插入数据库中,是否真的需要通过C#引入它?根据文章here,考虑使用SQL。

答案 1 :(得分:0)

你可以像这样使用简单的FileStream和BinaryReader

Boolean isSaving = true, savedOk = false;                  
new Task(new Action(() =>
{
    try
    {
        string fileName = "filename.txt";
        using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {
            BinaryReader br = new BinaryReader(fs);
            long size = new FileInfo(fileName).Length;
            int bytesPerRead = (int)(size < 512000 ? size : 512000);
            byte[] past = br.ReadBytes(bytesPerRead);
            int offset = 0;

            while (offset < size)
            {
                //TODO - SAVE YOUR BYTE ARRAY TO DB USING WCF OR LOCAL PROC 

                offset = offset + bytesPerRead;
                bytesPerRead = (int)(size - offset < 512000 ? size - offset : 512000);
                past = br.ReadBytes(bytesPerRead);                                    
            }
            savedOk = true;
       }
    }
    catch (Exception ex) { savedOk = false; }
    isSaving = false;                        

 })).Start();
 while (isSaving) 
 { 
    //DOUPDATES 
 };