Daniel Santos Ответов: 2

Как определить среднюю скорость загрузки?


Поэтому я хочу сделать Speedtest похожим, я загружаю файл размером 100 МБ (не слишком ли много для проверки средней скорости загрузки?).
Я получаю огромное число, и я не могу вычислить среднюю скорость загрузки таким образом...

Оффтоп: можно ли для расчета средней скорости загрузки?

Что я уже пробовал:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Downloading Then Exit Sub
        Downloading = True

        Dim wc As New WebClient
        AddHandler wc.DownloadProgressChanged, AddressOf wc_ProgressChanged
        AddHandler wc.DownloadFileCompleted, AddressOf wc_DownloadDone

        wc.DownloadFileAsync(New Uri("http://speedtest.ftp.otenet.gr/files/test100Mb.db"), tmp, Stopwatch.StartNew)
    End Sub

    Private Sub wc_DownloadDone(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs)
        Downloading = False
    End Sub

    Private Sub wc_ProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs)
        Me.Label2.Text = (e.BytesReceived / (DirectCast(e.UserState, Stopwatch).ElapsedMilliseconds / 1000.0#)).ToString("#")
    End Sub

2 Ответов

Рейтинг:
2

Richard MacCutchan

Смотрите комментарии по адресу служба WebClient.Событие DownloadProgressChanged (System.Net)[^].


Рейтинг:
2

Daniel Santos

Есть решение.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Downloading Then Exit Sub
        Downloading = True

        Dim wc As New WebClient
        AddHandler wc.DownloadProgressChanged, AddressOf wc_ProgressChanged
        AddHandler wc.DownloadFileCompleted, AddressOf wc_DownloadDone

        wc.DownloadFileAsync(New Uri("http://speedtest.ftp.otenet.gr/files/test1Gb.db"), tmp, Stopwatch.StartNew)

    End Sub

    Private Sub wc_DownloadDone(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs)
        Downloading = False
    End Sub

    Private Sub wc_ProgressChanged(sender As Object, e As DownloadProgressChangedEventArgs)
        Label33.Text = (e.BytesReceived / (DirectCast(e.UserState, Stopwatch).ElapsedMilliseconds / 1000.0#) / (1024 * 1024) * 8).ToString("#") & " MB"
    End Sub