Mam pytanie odnośnie optymalizacji klas z wieloma zdarzeniami. Załóżmy, że klasa ma 20 zdarzeń, a jak wiadomo nie zawsze ze wszystkich się korzysta. Stąd też niby powinno napisać się kod służący do optymalizacji zdarzeń, czyli utworzyć kolekcję zawierającą używane zdarzenia i napisać właściwości dostępu do tych zdarzeń przykładowy kod poniżej
(źródło: https://msdn.microsoft.com/pl-pl/library/optymalizacja-kodu-c-sharp--czesc-2.aspx)
class SampleClass
{
protected EventHandlerList _events = new EventHandlerList();
public event EventHandler SampleEvent1
{
add { _events.AddHandler("SampleEvent1", value); }
remove { _events.RemoveHandler("SampleEvent1", value); }
}
public void TestEvent1()
{
EventHandler eh = _events["SampleEvent1"] as EventHandler;
if (eh != null)
{
eh(this, null);
}
}
}
Dzięki temu kompilator nie utworzy dla każdego zdarzenia pola zawierającego delegate. No i wszystko byłoby ok gdyby nie fakt, że jeżeli będziemy mieli dla jednego zdarzenia sporo subskrybentów to za każdym razem gdy dodawana będzie metoda obsługi to będzie tworzony obiekt typu string ("SampleEvent1")będący kluczem umożliwiającym odnalezienie odpowiedniego delegata w kolekcji. Dodatkowo przy każdym wywołaniu zdarzenia również musi zostać utworzony obiekt typu string. Więc pytanie brzmi gdzie tutaj ta optymalizacja? Użytkownik może wywoływać zdarzenie milion razy więc wtedy zostanie utworzonych milion obiektów typu string, a tak utworzonych zostałoby tylko 20 typu EventHandler. No chyba, że jest coś o czym nie wiem, że jednak ta optymalizacja wnosi coś dobrego dlatego pytam.