【问题标题】:Calculate the speed of transfer file in socket c#计算socket c#中传输文件的速度
【发布时间】:2012-08-16 09:06:55
【问题描述】:

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

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
}

【问题讨论】:

  • @motaz99 在您提出的所有问题中,您只需说“帮我解决它”。最好实际告诉我们什么不起作用以及您的期望。
  • @usr 我不知道这个方法是否正确,如果不是我想更正它。
  • @motaz99 那么你要求我们做你的功课。我们不是在这里为您提供完整的解决方案。我们帮助您解决特定问题。

标签: c# performance sockets


【解决方案1】:

一些随机点:

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

【讨论】:

    【解决方案2】:

    我不相信

    为什么不呢?在您发现问题之前,任何人都无法解决问题。

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

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

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

    【讨论】:

    • @motaz99 什么“显示速度”?您的代码中没有。只是一些计算错误的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2016-08-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多