缓冲TextReader有意义吗?
TextReader有自己的内部缓冲区,我可以在创建时设置大小,所以有什么原因需要使用自己的缓冲区并调用Read( buffer, index, count ),而不是使用Read()逐个获取字符
发布于 2012-08-09 08:27:26
谁知道Read()方法的内部有多复杂呢?希望它们被优化为尽可能地快速和高效。但可能调用单次Read(...)会更快。方法,然后迭代字符数组。但另一个重要的问题是:在您的情况下,性能差异是否重要?如果你每分钟只读100个字符一次或两次,那么性能可能无关紧要。如果您按顺序处理多兆字节的文件,那么您可能希望获得最佳性能。如果是后者,那么同样的答案总是适用的:测量,不要猜测。
发布于 2012-08-09 08:43:53
这取决于你在做什么。如果您读取的固定长度记录不是由流中的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通过其Peek()方法免费为您提供了一个前视字符。
https://stackoverflow.com/questions/11875044
复制相似问题