C#中流操作计时结果是否有效??

为了测试程序运行效率,优化耗时操作,使用了StopWatch来测量程序运行耗时,但是发现了一个奇怪的地方。
先看主要代码:

Stopwatch testsw = new Stopwatch();
Stopwatch testswa = new Stopwatch();
Stopwatch testswb = new Stopwatch();
Stopwatch testswc = new Stopwatch();

testsw.Start();
using (MemoryStream stream = new MemoryStream(data))
{
  while (true)
  {
    try
    {
      //按帧截取数据
      testswa.Start();
      byte[] byteArray = new byte[100];
      int readCount = stream.Read(byteArray, 0, byteArray.Length);
      if (readCount <= 0) break;
      testswa.Stop();

      //将数据写入文件
      testswb.Start();
      FileStream outputStream;
      if (!File.Exists(filePath)) outputStream = File.Create(filePath);
      else outputStream = File.Open(filePath, FileMode.Append);
      using (var writer = new BinaryWriter(outputStream))
      {
        byte[] writeArray = new byte[readCount];
        Array.Copy(byteArray, writeArray, readCount);
        Write(writeArray);
      }
      testswb.Stop();
      
      //转换数据
      testswc.Start();
      int[][] resData = ConvertData(byteArray);
      testswc.Stop();
    }
    catch (Exception ex)
    {
      break;
    }
  }
}
testsw.Stop();

现象:
按程序步骤应当有,ElapsedMilliseconds 累加结果 sw ≈ swa + swb + swc ;
而实际运行结果为,ElapsedMilliseconds 累加结果 sw ≈ swb.+ swc ,并且 swa > sw 。

截取了几段日志:
###
15:33:10,185 [3] 消息描述:sw 5733 ms
15:33:10,185 [3] 消息描述:swa 14643 ms
15:33:10,185 [3] 消息描述:swb 4692 ms
15:33:10,185 [3] 消息描述:swc 1021 ms
###
15:35:17,280 [3] 消息描述:sw 5741 ms
15:35:17,280 [3] 消息描述:swa 14561 ms
15:35:17,280 [3] 消息描述:swb 4694 ms
15:35:17,280 [3] 消息描述:swc 1028 ms
###
15:35:58,897 [3] 消息描述:sw 5553 ms
15:35:58,897 [3] 消息描述:swa 14711 ms
15:35:58,897 [3] 消息描述:swb 4521 ms
15:35:58,897 [3] 消息描述:swc 1011 ms
搞不太懂,为什么会这样?还有流操作中的耗时统计什么时候能直接相加,什么时候不能直接相加?

If (readCount<=0){
testswa.stop();
Break;
}