查看方法的实现StreamReader.Read
,您可以看到它们都调用了内部ReadBuffer
方法。
Read()
方法首先读入内部缓冲区,然后一个接一个地在缓冲区上前进。
public override int Read()
{
if ((this.charPos == this.charLen) && (this.ReadBuffer() == 0))
{
return -1;
}
int num = this.charBuffer[this.charPos];
this.charPos++;
return num;
}
Read(char[]...)
也调用了ReadBuffer
,而是调用了调用者提供的外部缓冲区:
public override int Read([In, Out] char[] buffer, int index, int count)
{
while (count > 0)
{
...
num2 = this.ReadBuffer(buffer, index + num, count, out readToUserBuffer);
...
count -= num2;
}
}
所以我想唯一的性能损失是你需要调用Read()
比它更多的次数Read(char[])
,因为它是一个虚拟方法,调用本身会减慢它。