0

ファイルストリームを生成し、それをバッファ付きストリームリーダーでラップしています。次に、読み取り行を使用して、一度に1行ずつストリームを消費します。X行/バイト数の後、スタックオーバーフロー例外が発生しました。メソッドを再帰的に呼び出すことは問題なく小さなファイルを処理するため、問題にはならないようです。ここで簡単なことを見落としていたらいいのにと思います。ここにスニペット全体を投稿するためのロジックはたくさんありますが、これが要点です...

Instantiates a static stream reader //
{    
    using (FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read,
    FileShare.Read))
    using (BufferedStream bs = new BufferedStream(fs))
    using (reader = new StreamReader(bs))

     InitializeRecord(reader) // passes reader in
}

InitializeRecord(StreamReader reader)
{  
    //Makes some determinations whether to take in the first line or skip to first    header record... This is working fine. Initializes first line = reader.ReadLine()
    // Calls the first method to generate the header output which in turns calls the LineReader Method to consume the next line.
}

LineReader()
{ // Main loop for iterating over lines where stackoverflow occurs
    while (!reader.EndOfStream)
    {
        string prev_line = line;
        line = reader.ReadLine(); // StackOverFlow occurs here only on larger files / # of bytes read        
        VerifyLine(line,prev_line);
    }
}

VerifyLine(string line)
{ 
    // Does some checking on the line and calls output methods for each record type which in turn calls LineReader which LineReader exits when the endofstream is reached. 
    //But is blowing up prior to reaching the end of the stream.  By writing the lines out to disk as it iterates it writes a replica of the stream perfectly until the stack overflow occurs. 
    //This is only the difference of anything greater than a 5 MB file. Some of these records are hitting 9 million characters. I tried increasing the buffer size without luck.
}
4

1 に答える 1

1

メソッドを再帰的に呼び出すことは問題なく小さなファイルを処理するため、問題にはならないようです。

しかし、あなたはそれがより大きなファイルで爆破すると言っていますか?私にとって、これはあなたの再帰に問題があるように思えます。再帰なしで操作を実行する方法はありますか?verifyLineメソッドにもっと多くのコードを表示したいのですが。

于 2012-04-04T15:35:42.830 に答える