计算套接字c#中传输文件的速度

时间:2012-08-15 21:07:56

标签: c# performance sockets

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

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
}

2 个答案:

答案 0 :(得分:2)

一些随机点:

  • 你可能想要在循环之外采样时钟,而不是每次迭代,
  • 部分文件阅读时间也包含在您的计算中,
  • 您正在测量将字节放入OS套接字缓冲区的时间,而不是实际传输。

答案 1 :(得分: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);

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