0

我研究了很多,我找到了一种计算方法,但我不相信
请帮我解决它???:(
那是我的代码

while (sum < length)
{
    stopWatch.Restart();
    if (length - sum > packetSize)
    {
        count = fileStream.Read(buffer, 0, packetSize);
        Send(socket_File, buffer);
    }
    else
    {
        buffer = new byte[length - sum];
        count = fileStream.Read(buffer, 0, length - sum);
        Send(socket_File, buffer);
    }
    stopWatch.Stop();
    sum = sum + count;
    SendFile.Downloaded = sum;
    SendFile.Transfer_rate = ((sum * 8) / stopWatch.ElapsedMilliseconds).ToString();//kbps
}
4

2 回答 2

2

一些随机点:

  • 您可能想在循环之外采样时钟,而不是在每次迭代时,
  • 一些文件读取时间也包含在您的计算中,
  • 您正在测量将字节放入 OS 套接字缓冲区的时间,而不是实际传输。
于 2012-08-15T21:17:42.183 回答
0

我不相信

为什么不?在您确定问题之前,没有人可以解决问题。

但是,您的复制代码全错了。您假设读取填充了缓冲区。您不能假设使用 TCP。

if (length - sum > packetSize)
{
    count = fileStream.Read(buffer, 0, packetSize);
}
else
{
    count = fileStream.Read(buffer, 0, length - sum);
}
Send(socket_File, buffer, count);

当然,秒表的开始和停止以及打印输出应该在循环之外,否则你只是在计时单个读/写对。

于 2012-08-16T01:06:55.000 回答