Загрузите и загрузите скорость C # - PullRequest
4 голосов
/ 02 февраля 2010

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

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

Большое спасибо

Ответы [ 2 ]

1 голос
/ 23 июня 2013

Если вы хотите текущую скорость загрузки и выгрузки, вот как:

Сделайте таймер с интервалом в 1 секунду, если вы хотите, чтобы он обновлялся с этим интервалом, ваш выбор На отметке таймера добавьте этот код:

using System.Net.NetworkInformation;

int previousbytessend = 0;
int previousbytesreceived = 0;
int downloadspeed;
int uploadspeed;
IPv4InterfaceStatistics interfaceStats;
private void timer1_Tick(object sender, EventArgs e)
    {

        //Must Initialize it each second to update values;
        interfaceStats = NetworkInterface.GetAllNetworkInterfaces()[0].GetIPv4Statistics();

        //SPEED = MAGNITUDE / TIME ; HERE, TIME = 1 second Hence :
        uploadspeed = (interfaceStats.BytesSent - previousbytessend) / 1024; //In KB/s
        downloadspeed = (interfaceStats.BytesReceived - previousbytesreceived) / 1024;

        previousbytessend= NetworkInterface.GetAllNetworkInterfaces()[0].GetIPv4Statistics().BytesSent;
        previousbytesreceived= NetworkInterface.GetAllNetworkInterfaces()[0].GetIPv4Statistics().BytesReceived;

        downloadspeedlabel.Text = Math.Round(downloadspeed, 2) + " KB/s"; //Rounding to 2 decimal places
        uploadspeedlabel.Text = Math.Round(uploadspeed, 2) + "KB/s";
    }

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

1 голос
/ 02 февраля 2010

Полагаю, вы хотите кб / с. Это определяется путем взятия kbreceived и деления его на текущие секунды минус начальные секунды. Я не уверен, как сделать DateTime для этого в C #, но в VC ++ это было бы так:

COleDateTimeSpan dlElapsed = COleDateTime::GetCurrentTime()
                           - dlStart;
secs = dlElapsed.GetTotalSeconds();

Затем вы делите:

double kbsec = kbreceived / secs;

Чтобы получить kbreceived, вам нужно прочитать currentBytes, добавить уже прочитанные байты, а затем разделить на 1024.

Итак,

   // chunk size 512.. could be higher up to you

   while (int bytesread = file->Read(charBuf, 512))
   {
        currentbytes = currentbytes + bytesread;
        // Set progress position by setting pos to currentbytes
   }



   int percent = currentbytes * 100 / x ( our file size integer
                               from above);
   int kbreceived = currentbytes / 1024;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...