Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算套接字c中传输文件的速度#_C#_Performance_Sockets - Fatal编程技术网

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

C# 计算套接字c中传输文件的速度#,c#,performance,sockets,C#,Performance,Sockets,我做了很多研究,找到了一种计算方法,但我不相信 请帮我修一下好吗??:( 这是我的密码 while (sum < length) { stopWatch.Restart(); if (length - sum > packetSize) { count = fileStream.Read(buffer, 0, packetSize); Send(socket_File, buffer); } else {

我做了很多研究,找到了一种计算方法,但我不相信
请帮我修一下好吗??:(
这是我的密码

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
}
while(总和<长度)
{
stopWatch.Restart();
if(长度-总和>包装尺寸)
{
count=fileStream.Read(缓冲区,0,packetSize);
发送(套接字文件、缓冲区);
}
其他的
{
缓冲区=新字节[长度-总和];
count=fileStream.Read(缓冲区,0,长度-总和);
发送(套接字文件、缓冲区);
}
秒表;
总和=总和+计数;
SendFile.Downloaded=sum;
SendFile.Transfer_rate=((总和*8)/stopWatch.elapsedmillisons.ToString();//kbps
}
一些随机点:

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

为什么不呢?在你发现问题之前,没有人能解决它

但是,您的复制代码都是错误的。您假设读取会填满缓冲区。您不能假设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在所有问题中,您只需说“帮助我解决它”。最好实际告诉我们什么不起作用以及您的期望值。@usr我不知道此方法是否正确,如果不正确,我想更正它。@motaz99那么您要求我们做您的家庭作业。我们不是来为您提供完整的解决方案的。我们帮助您解决特定问题。@motaz99什么是“显示速度”?您的代码中没有任何内容。只要有些行计算不正确。