C# 确定准确的上传速度?

C# 确定准确的上传速度?,c#,wpf,file-upload,C#,Wpf,File Upload,我想检查系统的上传速度 void CheckUploadSpeed() { using (var wc = new WebClient()) { IPv4InterfaceStatistics ipis = networkInterface.GetIPv4Statistics(); BytesSentb4Upload = ipis.BytesSent; FileStream stream = File.OpenRead(string

我想检查系统的上传速度

void CheckUploadSpeed()
{
    using (var wc = new WebClient())
    {
        IPv4InterfaceStatistics ipis = networkInterface.GetIPv4Statistics();
        BytesSentb4Upload = ipis.BytesSent;
        FileStream stream = File.OpenRead(string.Format("{0}speedtext.txt", path)); //speedtext.txt is a 5 MB file.
        var fileBytes = new byte[stream.Length];
        stream.Read(fileBytes, 0, fileBytes.Length);
        stream.Close();
        startTime = Environment.TickCount; 
        wc.UploadDataAsync(new Uri("http://www.example.com/"), fileBytes);
        InternetSpeedResult = "Data upload started. Uploading 5MB file";
        wc.UploadProgressChanged += new UploadProgressChangedEventHandler(UploadProgressCallback);
        wc.UploadDataCompleted += wc_UploadDataCompleted;
    }
}
并在
上更改上载进度
这段代码实际上是为我的问题服务的,但问题是它不是每次都给出准确的结果。因为我指望在特定的时间段内完成
BytesSent
。这个数字会自动变化。如果速度非常低(小于512 KBPS)且非常高(大于20 MBPS),则无法提供预期的上载速率

  • 我应该在代码中做什么才能依赖结果
  • 是否有其他方法检查上传速度
  • 如果速度非常低(小于512 KBPS)和非常高(大于20 MBPS)。我应该采取什么方法

  • 我不会说这是一个解决方案,而这将是一个小的解决办法,可能会帮助您获得对您的上传速度的依赖

    将上传文件的大小增加到100MB左右。 设置
    秒>=60

    现在,无论网络的速度是什么,如果它很低,它会检查一分钟,让你知道上传速度。如果更高。然后,它也会让你知道,要么所有100 MB的传输,你会得到上传速度,如果不是,你会知道在60秒的速度


    由于使用高速互联网,问题在于交易开始时带宽不是最佳的。一旦您开始发送或接收数据,它将提高速度,从而将其更改为60秒,并且增加文件大小将在这两种情况下为您提供结果

    你怎么知道哪些结果不准确?你拿它们和什么做比较?@GlenThomas我拿它和Speedtest做比较。在快速连接上上传1MB并不是什么好事。我会试着增加。块大小也会有很大的不同。@GlenThomas抱歉,我已经更新了代码。文件大小为5MB。但问题是,如果速度更高,即使5MB也无法给出准确的结果。如果速度较慢,则需要很长时间才能确定上传速度。这也不准确。解决方案是按设定的时间上传,而不是设定数据大小。上传数据2分钟,而不是上传5MB的数据。
    void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e)
    {
        InternetSpeedResult = string.Format("Checking Upload Speed ... ");
        double endTime = Environment.TickCount; 
        double secs = Math.Round(Math.Floor(endTime - startTime) / 1000, 0); 
        if (secs >= 30) 
        { 
            UploadComplete(sender, e); 
        }
    }