Здравствуйте. Столкнулся с проблемой при написании программы измерения скорости сетевой карты. Вот так я считаю скорость
| Код | double start_b = 0; double end_b = 0; for (int i = 1; ; ) { NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces(); IPv4InterfaceStatistics stat = ni[1].GetIPv4Statistics(); kbytes = stat.BytesReceived / 1024; Thread.Sleep(500); if (i == 1) { start_b = kbytes; ; i = 2; } else { end_b = kbytes; i = 1; speed = (end_b - start_b)*2; }
}
|
дальше раз в 500мс скорость выводиться в трей.
| Код | label1.Text = speed.ToString()+" кб\\с"; label4.Text = kbytes.ToString() + " кб"; g.FillRectangle(new SolidBrush(Color.Black), new Rectangle(0, 0, 32, 32)); if (speed < 100) { g.DrawString(speed.ToString(), new Font("Verdana", 20), new SolidBrush(Color.White), -2, 0); } if (speed >= 100) { g.DrawString(speed.ToString(), new Font("Verdana", 14), new SolidBrush(Color.White), -2, 0); } trayimage = new Bitmap(trayimagen); Icon icon = Icon.FromHandle(trayimage.GetHicon()); notifyIcon1.Icon = icon;
|
Но проблема в том что очень большая разница с реальной скоростью. Если я ставлю закачку и ограничиваю скорость например до 30кб\с то программа в 1 секунду показывает 10, затем 30, 30, 46, 55, 15. Тоесть разница около 15 кб\с. Каким образом можно добиться более точного вычисления? |