CPU時間を使用するイベントリスナー
-
05-07-2019 - |
質問
これは愚かな質問かもしれませんが、イベントリスナーはタイマーのようなCPUサイクルを使用していますか、それともイベントが発生するまで非アクティブですか?
言語固有ですか、それともすべての言語で基本的に同じように処理されますか?
ネットワーク切断イベントが発生したときにのみ何もしない小さなサービスを作成したいのですが、リスニングだけのリソース(もちろんメモリ以外)をサービスに使用させたくありません。
このようなことをするつもりです
using NetworkUtilities;
ManagementEventWatcher networkAdapterArrivalWatcher = new ManagementEventWatcher("\\root\\wmi","SELECT * FROM MSNdis_NotifyAdapterArrival ");
networkAdapterArrivalWatcher.Options.Timeout = new TimeSpan(0,0,5);
ManagementEventWatcher networkAdapterRemovalWatcher = new ManagementEventWatcher("\\root\\wmi","SELECT * FROM MSNdis_NotifyAdapterRemoval " );
networkAdapterRemovalWatcher.Options.Timeout = new TimeSpan(0,0,5);
ConnectionNotifierHandler handler = new ConnectionNotifierHandler();
networkAdapterArrivalWatcher.EventArrived += new EventArrivedEventHandler(handler.Arrived);
networkAdapterRemovalWatcher.EventArrived += new EventArrivedEventHandler(handler.Removed);
//Start watching for events
networkAdapterArrivalWatcher.Start();
networkAdapterRemovalWatcher.Start();
public void Arrived(object sender, EventArrivedEventArgs e)
{
using (ManagementBaseObject ev = e.NewEvent)
{
//Log the event
}
}
public void Removed(object sender, EventArrivedEventArgs e)
{
using (ManagementBaseObject ev = e.NewEvent)
{
//Log the event
}
}
解決
C#では、イベントは単なる関数デリゲート(関数へのポインター)であり、「オンデマンド」と呼ばれます。余分なCPUサイクルを使用しません。
ただし、次のような監視イベントを参照している場合:
-
ソケットリスナーの
-
OnConnecitonPending
。
ウィンドウアプリケーション用の -
OnWindowMessage
。
これらのイベントを監視するためにスレッドを使用するのは確かであり、もちろん余分なCPUがかかると思います。
他のヒント
イベントリスナーは、イベントが実際に発生するまで(およびイベントハンドラーが呼び出されるまで)CPU時間を使用しません。
イベントリスナーに関連するバックグラウンドプロセスはありません。
通常、組み込みのイベントリスニングシステムに準拠するイベントリスナーは、イベントが発生するまでCPU時間を使用しません。むしろ、イベントによってトリガーされるデリゲートです。イベントに対する彼らの関心はシステムによって記録されます。これは、たとえば、Objective-C / Cocoaスタイルのデリゲートでは最も明らかですが、原則はどこでも適用されます。
所属していません StackOverflow