using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
namespace EventPerformaneMeasurement
public static void Main()
var sw = new Stopwatch();
var list = Enumerable.Range(1, 15000).Select(x => new PropertyChangedEventHandler((s, _e) => { Console.WriteLine(string.Format("Handler {0} called", x)); })).ToList();
list.ForEach(handler=>mc.PropertyChangedNew += handler);
Console.WriteLine(sw.ElapsedMilliseconds);
list.ForEach(handler=>mc.PropertyChangedNew -= handler);
Console.WriteLine(sw.ElapsedMilliseconds);
private HashSet<PropertyChangedEventHandler> _handlers = new HashSet<PropertyChangedEventHandler>();
public event PropertyChangedEventHandler PropertyChangedNew
add {_handlers.Add(value);}
remove {_handlers.Remove(value);}