Ist Ereignis-Listener CPU-Zeit
-
05-07-2019 - |
Frage
Vielleicht ist das eine dumme Frage, aber tun Ereignis-Listener verwenden CPU-Zyklen wie ein Timer, oder sind sie inaktiv, bis das Ereignis ausgelöst wird?
Ist es sprachspezifische oder haben alle Sprachen verarbeiten diese im Grunde das gleiche?
Ich mag einen kleinen Dienst schreiben, die nur etwas tut, wenn ein Netzwerk trennen Ereignis ausgelöst wird, und ich möchte nicht, die Service-Ressourcen verbrauchen nur (außer Speicher natürlich) zu hören.
Ich plane, so etwas zu tun
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
}
}
Lösung
In C # Ereignisse werden nur funktionieren Delegierten (Zeiger auf Funktion), die als „on demand“ wird und wird keinen zusätzlichen CPU-Zyklus verwendet werden.
Aber, wenn Sie beziehen sich auf die Überwachung Ereignisse wie:
-
OnConnecitonPending
für einige Socket-Listener. -
OnWindowMessage
für ein Fenster Anwendung.
Ich glaube, das sicher einen Thread verwenden, um ihre Ereignisse zu überwachen und natürlich werden zusätzliche CPU kosten.
Andere Tipps
Ereignis-Listener verwendet keine CPU-Zeit, bis das Ereignis tatsächlich ausgelöst wird (und Ihre Event-Handler aufgerufen wird).
Es gibt keinen Hintergrundprozess mit einem Ereignis-Listener beteiligt.
Im Allgemeinen Ereignis-Listener konform ein ereignisAbhörSystem eingebaut keine CPU-Zeit verwenden, bis das Ereignis ausgelöst wird. Vielmehr sind sie die Delegierten, die durch das Ereignis ausgelöst werden. Ihr Interesse an der Veranstaltung wird vom System festgestellt. Am deutlichsten wird dies zum Beispiel mit Objective-C / Cocoa-Stil Delegierten, aber das Prinzip gilt fast überall.