为了测试程序运行效率,优化耗时操作,使用了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;
}