1

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

方法一: 解析平面文件并将其转换为csv。然后在sql中使用批量插入。

问题:

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

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

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

4

2 回答 2

1

也许在这里检查问题。具体来说,如果您使用的是 .Net 4.0,它会提到MemoryMappedFile的使用。

但是,如果您只想将其插入数据库,是否真的需要通过 C# 引入它?考虑按照此处的文章使用 SQL 进行操作。

于 2013-01-23T08:28:51.530 回答
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 
 };
于 2013-01-23T09:20:12.453 回答