1

フラット ファイル サイズが 1 GB を超えています。ファイルを解析して DB に挿入する必要があります。

方法 1: フラットファイルを解析して csv に変換します。次に、SQLで一括挿入を使用します。

問題:

ファイルの読み取りに非同期を使用すると、System.OutOfMemoryException がスローされます

約30分(サイズにもよりますが)かかります。

時間を短縮するためにデータ構造を効率的に使用する必要があるか、またはその他の効率的な方法論を使用する必要がありますか?

4

2 に答える 2

1

おそらくここで質問を確認してください。具体的には、.Net 4.0 を使用している場合は、MemoryMappedFileの使用について言及しています。

ただし、データベースに挿入するだけの場合、C# 経由でこれを取り込む必要は本当にあるのでしょうか? こちらの記事に従って、SQL で実行することを検討してください。

于 2013-01-23T08:28:51.530 に答える
0

このようにBinaryReaderで単純なFileStreamを使用できます

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 に答える