Рассматривая реализацию методов 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[])
, и, поскольку это виртуальный метод, сами вызовы замедляют его.