バッファリングする意味はありTextReader
ますか?
TextReader
Read( buffer, index, count )
独自の内部バッファがあり、作成時にサイズを設定できるので、独自のバッファを使用して、charを使用してcharを取得するだけで呼び出したい理由はありRead()
ますか?
Read() メソッドの内部構造がどれほど複雑かを誰が知っていますか? うまくいけば、可能な限り高速かつ効率的になるように最適化されます。ただし、単一の Read(...) メソッドを呼び出してから、文字の配列を反復処理する方が高速である可能性があります。しかし、もう 1 つの重要な質問は次のとおりです。あなたの場合、パフォーマンスの違いは重要ですか? 1 分間に 1 回か 2 回 100 文字を読み取るだけであれば、パフォーマンスはおそらく問題になりません。数メガバイトのファイルを順次処理している場合は、可能な限り最高のパフォーマンスが必要になるでしょう。後者の場合は、常に同じ答えが当てはまります。推測しないで測定してください。
それはあなたが何をしているかによります。CR+LF ペアで区切られていない固定長レコードをストリームから読み取る場合は、次の行に沿って何かを実行する必要があります。
public static void Process()
{
using ( Stream s = OpenCommunicationsStream() )
using ( TextReader tr = new StreamReader(s) )
{
char[] record = char[80] ;
int chars_read ;
while ( (chars_read=tr.Read(record,0,record.Length)) == record.Length )
{
DoSomethingWithRecord( record ) ;
}
if ( chars_read > 0 ) throw new InvalidDataException("wrong length record") ;
}
return ;
}
Read/0
ではなく使用する理由、Read/3
またはReadBlock/3
ニーズとコンテキストに完全に依存する理由。たとえば、パーサーを作成している場合、テキストの受信ストリームを文字単位で処理したい場合があります。特に、そのメソッドをTextReader
介して 1 文字の先読みを無料で提供するためです。Peek()