VB.NET: Werden Ereignisse ausgelöst, obwohl keine Event-Handler vorhanden sind?

8

Ich habe eine Klasse, die einige große XML-Dateien herunterlädt, untersucht und speichert. Manchmal möchte ich, dass die Benutzeroberfläche mir sagt, was vor sich geht, aber manchmal werde ich die Klasse verwenden und die Ereignisse ignorieren. Also habe ich Codezeilen wie folgt an einem Dutzend Stellen platziert:

%Vor%

Meine Frage ist das - werden diese Ereignisse meinen Code verlangsamen, wenn nichts darauf wartet? Werden sie sogar feuern?

    
Shane Miskin 30.10.2008, 15:05
quelle

4 Antworten

6

Es gibt keine Magie, der unter RaiseEvent verborgene Code tut genau das, was Sie erwarten würden, er durchläuft eine Sammlung von Handlern und führt jeden aus. Der Aufwand zu überprüfen, ob es irgendwelche Handler gibt ist trivial, mach dir keine Sorgen darüber.

Wenn Ihre REAL -Frage lautet: "Um Zeit zu sparen, sollte ich überprüfen, ob die Ereignisse Handler haben, bevor die Ereignisse ausgelöst werden?" . . . dann ist die Antwort "Nein", du wirst dadurch nichts gewinnen.

Machen Sie sich auch keine Gedanken über die Optimierung, es sei denn, Sie müssen dies ( Wikipedia-Eintrag , um zu sehen, warum.)

Re: Aufruf von GetMystring() .

Ja, dies hängt damit zusammen, wie Sie Ereignisse in C # auslösen, bei denen Sie vor dem Auslösen des Ereignisses prüfen, ob Handler vorhanden sind. Zum Beispiel:

%Vor%

Nettes Experiment übrigens:)

    
Binary Worrier 30.10.2008, 16:30
quelle
7

Meine eigene Antwort:

In VB.NET wird das Ereignis NICHT ausgelöst, wenn keine Handler eingerichtet sind, die darauf warten.

Ich habe ein kleines Experiment gemacht, bei dem der Code, der das Ereignis auslöst, das Ergebnis einer Funktion übergibt, und diese Funktion nur ausgeführt wird, wenn ein Event-Handler eingerichtet wurde, um das Event zu behandeln.

%Vor%

Mit anderen Worten, ich sage, dass die obige Funktion GetMystring nicht aufgerufen wird, solange keine Handler existieren.

    
Shane Miskin 30.10.2008 16:49
quelle
1

Es könnte eine kleine Menge an Overhead sein, aber ich würde mir keine Sorgen machen. Sicherlich wird die tatsächliche Aktion der Leistungstreiber sein.

Als Nebenbemerkung: Wenn ein Ereignis ohne Handler in C # ausgelöst wird, wird tatsächlich eine Ausnahme ausgelöst. VB.Net hat dieses Problem nicht:)

    
Joel Coehoorn 30.10.2008 15:07
quelle
0
  

Wenn Ihre ECHTE Frage lautet: "Um Zeit zu sparen, sollte ich die Ereignisse überprüfen   Haben Sie Handler, bevor Sie die Ereignisse anwerfen? "... dann ist die Antwort   "Nein", du wirst dadurch nichts erreichen.

Wenn Sie in C # das Ereignis nicht auf Null prüfen und keine Handler registriert sind, erhalten Sie eine NullReferenceException.

    
user1739635 15.10.2012 21:15
quelle

Tags und Links