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 に答える