情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

.NETアプリケーションの通信速度を算出する

.NETのパフォーマンスカウンタを使います。.NET CLR Networking/Bytes Sent.NET CLR Networking/Bytes Receivedで総送信量と送受信量を取得できるので、その値から速度を求めます。

using System;
using System.Diagnostics;
using System.Threading;

namespace Bandwith
{
    class Program
    {
        public static float bytesSent1;
        public static float bytesSent2;

        public static float bytesReceived1;
        public static float bytesReceived2;

        public static void Main(string[] args)
        {
            PerformanceCounter bytesSentPerformanceCounter = new PerformanceCounter();
            bytesSentPerformanceCounter.CategoryName = ".NET CLR Networking";
            bytesSentPerformanceCounter.CounterName = "Bytes Sent";
            bytesSentPerformanceCounter.InstanceName = "<アプリケーション名>[<プロセスID>]";
            bytesSentPerformanceCounter.ReadOnly = true;

            PerformanceCounter bytesReceivedPerformanceCounter = new PerformanceCounter();
            bytesReceivedPerformanceCounter.CategoryName = ".NET CLR Networking";
            bytesReceivedPerformanceCounter.CounterName = "Bytes Received";
            bytesReceivedPerformanceCounter.InstanceName = "<アプリケーション名>[<プロセスID>]";
            bytesReceivedPerformanceCounter.ReadOnly = true;

            using (Timer timer = new Timer((state) =>
            {
                bytesSent2 = bytesSentPerformanceCounter.NextValue();
                float difSent = bytesSent2 - bytesSent1;
                bytesSent1 = bytesSent2;

                bytesReceived2 = bytesReceivedPerformanceCounter.NextValue();
                float difReceived = bytesReceived2 - bytesReceived1;
                bytesReceived1 = bytesReceived2;

                Console.WriteLine("送信:{0}KB/s, 受信:{1}KB/s", difSent / 1000, difReceived / 1000);
            }, null, 0, 1000))
            {
                Console.ReadKey();
            }
        }
    }
}

対象アプリケーションのアプリケーション設定ファイルに以下の設定を追加せねばならないことに注意してください。

<configuration>
  <system.net>
    <settings>
      <performanceCounters enabled="true"/>
    </settings>
  </system.net>
</configuration>
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-C#