Cześć. Próbowałem ostatnio zliczyć całość pobranych przez mój PC danych. Doradzono mi skorzystać z perfmona. Po przeczytaniu kilku artykułów doszedłem do wniosku, że powinienem zbierać wartości z "Network Interface" -> "Bytes Received/sec" -> <mój NIC>
Zrobiłem coś w tym stylu (pseudokod):
timer1(interwal 1ms)
{
suma_sekundowa += pobierz("Bytes Received/sec");
ilosc_pobran++;
}
timer2(interwal 1000ms)
{
suma_ogolna += (suma_sekundowa / ilosc_pobran);
suma_sekundowa = 0;
ilosc_pobran = 0;
}
Pierwsze pytanie - czy tak można to obliczać? Wydaje mi się, że dokładność powinna być "w miarę" dobra, chociaż wszelkiego rodzaju spowolnienia spowodują fluktuacje okresu próbkowania...
Drugie pytanie - ściąganie 8.6MB pliku dało wynik 9.2MB. W opisie tego PerformanceCountera stoi jasno, że zlicza wszystkie warstwy protokołu, ale żeby "opakowanie" tyle zajmowało??
Trzecie pytanie... zrobiłem prosty wykres kontrolujący prędkość przepływu danych - pobierał on tylko dane niezerowe i to z jak najmniejszym interwałem. Oto, co dostałem:

Czy widać prawidłowość? Podpowiem, że zielona pozioma linia to 0Bps, a niebieskie pionowe kreski to markery sekundowe. I wyszło na to, że przy aktywności zbliżonej do idle, wartość "Bytes Received/sec" oscyluje w granicach 2800! Dlaczego?