访问流的“长度”和“位置”属性对性能有显着影响吗?

问题描述 投票:0回答:1
// Case 1 
while(true)
{
   int packetLength = GetPacketLength();
   byte[] data = br.ReadBytes(packetLength);
   if(data.length < packetLength)
   {
      Console.Write("end");
      break;
   }
}
// Case2
while(true)
{
   int packetLength = GetPacketLength();
   if(stream.Length - stream.Position < packetLength)
   {
      Console.Write("end");
      break;
   }
   byte[] data = br.ReadBytes(packetLength);
}

我发现,当使用 BinaryReader 循环读取和处理文件数千次时,使用情况 1 比使用情况 2 快得多。 我已经像情况 1 一样使用它,但我很好奇为什么它更慢。这就是我写这篇文章的原因。

c# performance properties io binaryreader
1个回答
0
投票

正如您在

Stream
源代码中看到的,
Length
Position
是抽象的,因此它们的实现仅取决于子类,子类的实现可能会或可能不会很慢。

© www.soinside.com 2019 - 2024. All rights reserved.