Рейтинг:
2
Jochen Arndt
Откуда вы взяли размер и как он печатается (как значение преобразуется в МБ)?
Разница может быть получена путем использования различных определений для MB., MB
относится к 2-основанным экспонентам, в то время как это было заменено на MiB
и MB
относится к 10-основанным экспонентам. Смотреть также Мебибайт - Википедия[^].
Armin.Engineer
Я меняю формулу и делюсь на это число 1048576
у меня был файл размером 183 мегабайта, но на этот раз я вычислил 190 мегабайт.
Jochen Arndt
Пожалуйста, покажите свой расчет или проверьте его сами. Если у вас есть размер в байтах:
MB = размер / (1000 * 1000)
MiB = размер / (1024 * 1024)
Для правильного округления при использовании целочисленной арифметики добавьте половину значения деления:
MB = (размер + 1000 * 500) / (1000 * 1000)
MiB = (размер + 1024 * 512) / (1024 * 1024)
Armin.Engineer
Спасибо.
Это размер установочного файла :
Размер : 183 МБ (192,340,232 байта)
Размер на диске: 183 МБ (192,344,064 байта)
Мое приложение вычисляет около 190 МБ, когда эта передача fie происходит в моей локальной сети.
Почему?
Jochen Arndt
Размер диска обычно немного больше, потому что данные хранятся там кусками (секторами). Ваш диск имеет размер сектора 4 Кб (4096 байт). Таким образом, файл занимает 46 959 секторов (192,344,064 / 4096) на диске.
Я не знаю, почему ваша программа показывает 190 МБ, потому что вы до сих пор не показали нам, как вы получаете и вычисляете свою ценность.
Armin.Engineer
objIPInterfaceStatistics2 = objNetworkInterface[numberinterface].GetIPStatistics();
долго newBytesreceived;
newBytesreceived = objIPInterfaceStatistics2.BytesReceived;
if (checkdata = = true)
{
checkdata = false;
newBytesreceived = 0;
}
long newUsage = newBytesreceived - oldBytesreceived2;
Traffic usage += newUsage;
float converttrafficusage = Traffic / 1048576;
oldBytesreceived2 = objIPInterfaceStatistics2.BytesReceived;
работник.ReportProgress ((int)Math.Потолок (converttrafficusage));
Нить.Спать(1000);
Это правда?
Jochen Arndt
Видишь https://msdn.microsoft.com/en-us/library/system.net.networkinformation.ipinterfacestatistics(v=vs. 110).aspx:
"BytesReceived получает количество байтов, которые были получены на интерфейсе."
Это необработанные байты, полученные на интерфейсе. К ним относятся байтесс заголовка пакета и протокола.
[РЕДАКТИРОВАТЬ]
И он может включать в себя байты из других коммуникаций!
[/РЕДАКТИРОВАТЬ]
Но вам, вероятно, нужна только полезная нагрузка. Это число байтов, наконец, сохраненное. Как это сделать, зависит от того, как хранятся данные (например, с потоками, получая длину потока после того, как все байты были получены).
Armin.Engineer
Да, вы правы.
Я должен изменить свой алгоритм