Как создать тест скорости загрузки с помощью .NET(С#)

Я хочу создать тест скорости для проверки соединения. Я бы хотел загрузить 15 секунд, что затем дает мне среднюю скорость загрузки.

Кто-нибудь знает, как это создать? или есть лучшая идея сделать тест скорости?

Спасибо за чтение!

Ответы

Ответ 1

Этот пример попытается загрузить googletalk, а затем выведет информацию о загрузке.

пс. при попытке времени и работы избежать использования DateTime, поскольку они могут вызвать проблемы или неполадки, всегда используйте Секундомер, доступный в пространстве имен System.Diognostics.

    const string tempfile = "tempfile.tmp";
    System.Net.WebClient webClient = new System.Net.WebClient();

    Console.WriteLine("Downloading file....");

    System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
    webClient.DownloadFile("http://dl.google.com/googletalk/googletalk-setup.exe", tempfile);
    sw.Stop();

    FileInfo fileInfo = new FileInfo(tempfile);
    long speed = fileInfo.Length / sw.Elapsed.Seconds;

    Console.WriteLine("Download duration: {0}", sw.Elapsed);
    Console.WriteLine("File size: {0}", fileInfo.Length.ToString("N0"));
    Console.WriteLine("Speed: {0} bps ", speed.ToString("N0"));

    Console.WriteLine("Press any key to continue...");
    Console.ReadLine();

Ответ 2

Как publicENEMY, ответ kay.one может дать неправильную скорость, потому что Скорость жесткого диска может быть ниже, чем скорость сети (например: Гигабитное волокно Google намного быстрее, чем средняя скорость записи на жестком диске 5200 об/мин)

Это пример кода, полученного из ответа kay.one, но загружает содержимое данных в System.Byte[] и, следовательно, в память.

Также я замечаю, что после самой первой загрузки скорость резко возрастает и перескакивает через реальную скорость сети, потому что System.Net.WebClient использует кеш загрузки IE: для моих требований я добавляю только параметр t querystring, явно уникальный для каждого запроса.

Console.WriteLine("Downloading file....");

var watch = new Stopwatch();

byte[] data;
using (var client = new System.Net.WebClient())
{
    watch.Start();
    data = client.DownloadData("http://dl.google.com/googletalk/googletalk-setup.exe?t=" + DateTime.Now.Ticks);
    watch.Stop();
}

var speed = data.LongLength / watch.Elapsed.Seconds;

Console.WriteLine("Download duration: {0}", watch.Elapsed);
Console.WriteLine("File size: {0}", data.Length.ToString("N0"));
Console.WriteLine("Speed: {0} bps ", speed.ToString("N0"));

Console.WriteLine("Press any key to continue...");
Console.ReadLine();

Ответ 3

  • Используйте известный размер файла и ловушку, сколько времени требуется для загрузки. (используя два DateTime.now() s)

В CodeProject есть библиотека, которую я нашел. Это несколько классов С#, которые позволяют отслеживать сетевые подключения, включая скорость загрузки и загрузки. Ссылка здесь

Ответ 4

как файл загрузки даст вам правильную скорость ссылки. то, что вы получаете при загрузке файла, является большой недооценкой фактической скорости, которую вы получаете.

Я думаю, что вы должны сделать некоторый вид передачи пакета udp и найти время, необходимое для его получения на другом конце.

С уважением,

Ответ 5

В Visual Basic dot net класс "Мой" предоставляет функцию для загрузки файлов, попытайтесь найти его псевдоним в С#. Затем создайте счетчик таймера и подсчитайте секунды с момента начала загрузки.

Ответ 6

Используйте код для проверки скорости подключения к Интернету с помощью С#:

private long bytesReceivedPrev = 0;
    private void CheckBandwidthUsage(DateTime now)
    {
        NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
        long bytesReceived = 0;
        foreach (NetworkInterface inf in interfaces)
        {
            if (inf.OperationalStatus == OperationalStatus.Up &&
                inf.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
                inf.NetworkInterfaceType != NetworkInterfaceType.Tunnel &&
                inf.NetworkInterfaceType != NetworkInterfaceType.Unknown && !inf.IsReceiveOnly)
            {
                bytesReceived += inf.GetIPv4Statistics().BytesReceived;
            }
        }

        if (bytesReceivedPrev == 0)
        {
            bytesReceivedPrev = bytesReceived;
        }
        long bytesUsed = bytesReceived - bytesReceivedPrev;
        double kBytesUsed = bytesUsed / 1024;
        double mBytesUsed = kBytesUsed / 1024;
        internetUsage.Add(now, mBytesUsed);
        if (internetUsage.Count > 20)
        {
            internetUsage.Remove(internetUsage.Keys.First());
        }
        bytesReceivedPrev = bytesReceived;
    }

    private void CheckInternetSpeed(DateTime now)
    {
        WebClient client = new WebClient();
        Uri URL = new Uri("http://sixhoej.net/speedtest/1024kb.txt");
        double starttime = Environment.TickCount;
        client.DownloadFile(URL, Constants.GetAppDataPath() + "\\" + now.Ticks);
        double endtime = Environment.TickCount;

        double secs = Math.Floor(endtime - starttime) / 1000;

        double secs2 = Math.Round(secs, 0);

        double kbsec = Math.Round(1024 / secs);

        double mbsec = kbsec / 100;

        internetSpeed.Add(now, mbsec);
        if (internetSpeed.Count > 20)
        {
            internetSpeed.Remove(internetSpeed.Keys.First());
        }
        client.Dispose();
        try
        {
            // delete downloaded file
            System.IO.File.Delete(Constants.GetAppDataPath() + "\\" + now.Ticks);
        }
        catch (Exception ex1)
        {
            Console.WriteLine(ex1.Message);
        }
    }