Один путь состоит в том, чтобы получить значение эти счетчики производительности "Сети/Байты CLR.NET Полученные" и "Сети/Байты CLR.NET, Отправленные" за Вашим приложением:
PerformanceCounter bytesSentPerformanceCounter= new PerformanceCounter();
bytesSentPerformanceCounter.CategoryName = ".NET CLR Networking";
bytesSentPerformanceCounter.CounterName = "Bytes Sent";
bytesSentPerformanceCounter.InstanceName = GetInstanceName();
bytesSentPerformanceCounter.ReadOnly = true;
float bytesSent = bytesSentPerformanceCounter.NextValue();
//....
private static string GetInstanceName()
{
// Used Reflector to find the correct formatting:
string assemblyName = GetAssemblyName();
if ((assemblyName == null) || (assemblyName.Length == 0))
{
assemblyName = AppDomain.CurrentDomain.FriendlyName;
}
StringBuilder builder = new StringBuilder(assemblyName);
for (int i = 0; i < builder.Length; i++)
{
switch (builder[i])
{
case '/':
case '\\':
case '#':
builder[i] = '_';
break;
case '(':
builder[i] = '[';
break;
case ')':
builder[i] = ']';
break;
}
}
return string.Format(CultureInfo.CurrentCulture,
"{0}[{1}]",
builder.ToString(),
Process.GetCurrentProcess().Id);
}
private static string GetAssemblyName()
{
string str = null;
Assembly entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly != null)
{
AssemblyName name = entryAssembly.GetName();
if (name != null)
{
str = name.Name;
}
}
return str;
}
Примечание, что счетчики производительности не создаются до первого раза, когда Вы пользуетесь соответствующими сетевыми библиотеками (Вы получите InvalidOperation: Экземпляр 'XXX' не существует в указанной Категории), и что необходимо вставить
<configuration>
<system.net>
<settings>
<performanceCounters enabled="true" />
</settings>
</system.net>
</configuration>
в app.config.
Для полной демонстрационной загрузки NetworkTraffic.cs и NetworkTraffic.exe.config.
Я не забыл читать статью об этом и вскопал ее для Вас, http://nayyeri.net/blog/how-to-calculate-network-utilization-in-net/
выборка перед их кодом:
.NET идет с тремя счетчиками производительности для используемых параметров в формуле использования сети из поля. Всех этих счетчиков располагают в категории Сетевого интерфейса и называют "Байтами, Отправленной/секундой", "Байты Полученная/секунда" и "Текущая Пропускная способность". Единственный параметр, который требует, чтобы некоторое дополнительное усилие было вычислено, является time_in_sec.
"Байты Отправленные/секунды" и "Байты Полученные/секунды" счетчики вычисляют свои значения на основе различных образцов, и лучший способ получить лучшее значение из этих счетчиков находит суммирование их значений в цикле, потому что в некоторых случаях их значения могут быть нулем или очень отличающийся от реального состояния сети. Тогда мы можем найти time_in_sec параметр путем нахождения количества раз, что цикл выполнен с помощью итераций, потому что наши счетчики производительности находят свои значения в течение секунд, полное время в секундах равно количеству повторений.
я m, смотрящий для байтов/секунда на приложение... не для целого компьютера.... Doesnt, кажется, работают на консоль прикладное сообщение об ошибке: "консольное приложение не существует в указанной Категории".
Это не работает..., насколько я знаю bytesSentPerformanceCounter. InstanceName =""//здесь необходимо дать название сетевой платы...
так или иначе отправленные байты являются слишком меньше, чем байты, полученные... не, что я просматриваю сеть из своего приложения... Я отправляю к изображениям веб-сервиса (как байты) и другие XML-файлы (немного kbs как строковый вход к функции веб-сервиса). В ответ я иногда возвращаю коды ошибки или bool... все еще, отправленные байты слишком меньше, чем получены... полученные, в 5 раз больше... я озадаченный m...