Cálculo del ancho de banda

¿Hay alguna forma en que pueda calcular el ancho de banda (paquetes enviados y recibidos) por un exe / aplicación a través de la red? he mirado en IPGlobalProperties ,

y otras clases …. quiero paquetes enviados n recibidos por una sola aplicación … he comprobado http://netstatagent.com/ Necesito algo similar … ¿hay algo en .net que pueda ayudarme?

Mi aplicación se conecta al servicio web para enviar algunos archivos de imagen … y también recibe archivos …

Una forma es recuperar el valor de los contadores de rendimiento “.NET CLR Networking / Bytes Received” y “.NET CLR Networking / Bytes enviados” para su aplicación:

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; } 

Tenga en cuenta que los contadores de rendimiento no se crean hasta la primera vez que usa las bibliotecas de red relevantes (obtendrá InvalidOperation: la instancia 'XXX' no existe en la Categoría especificada) y que necesita insertar

        

en tu app.config

Para obtener una muestra completa, descargue NetworkTraffic.cs y NetworkTraffic.exe.config .

Recordé haber leído un artículo sobre esto y haberlo desenterrado, http://nayyeri.net/blog/how-to-calculate-network-utilization-in-net/

un extracto antes de su código:

.NET viene con tres contadores de rendimiento para los parámetros utilizados en la fórmula de utilización de red de fábrica. Todos estos contadores se encuentran en la categoría Interfaz de red y se denominan “Bytes enviados / seg.”, “Bytes recibidos / seg.” Y “Ancho de banda actual”. El único parámetro que requiere un esfuerzo adicional para calcular es time_in_sec.

Los contadores “Bytes enviados / seg.” Y “bytes recibidos / seg.” Calculan sus valores según diferentes muestras y la mejor forma de obtener un mejor valor de estos contadores es encontrar la sum de sus valores en un bucle porque en algunos casos sus valores pueden ser cero o muy diferente del estado real de la red. Entonces podemos encontrar el parámetro time_in_sec al encontrar el número de veces que se repite el ciclo porque nuestros contadores de rendimiento encuentran sus valores durante un segundo, el tiempo total en segundos es igual al número de iteraciones.

Estoy buscando bytes / seg por aplicación … no para toda la computadora … Parece que no funciona para una aplicación de consola … Mensaje de error: “la aplicación de la consola no existe en la Categoría especificada”.

Esto no funciona … por lo que sé bytesSentPerformanceCounter.InstanceName = “” // aquí debe dar el nombre de la tarjeta de red …

de alguna manera, los bytes enviados son mucho menos que los bytes recibidos … no es que navegue desde mi aplicación … Envío a las imágenes del servicio web (como bytes) y otros archivos XML (pocos kbs como entrada de cadena al servicio web) función). A cambio, a veces devuelvo códigos de error o bool … aún así los bytes enviados son demasiado menores que los recibidos … recibí 5 veces más … estoy perplejo …