代码之家  ›  专栏  ›  技术社区  ›  LJW

使用“什么都不做”默认事件处理程序是否存在性能缺陷?

  •  2
  • LJW  · 技术社区  · 15 年前

    假设我有一个数千个对象的集合,所有这些对象都实现了以下功能:

    public event EventHandler StatusChanged = (s,e) => {};
    private void ChangeStatus()
    {
      StatusChanged(this, new EventArgs());
    }
    

    如果没有为每个对象订阅该事件的处理程序,那么使用no op事件处理程序是否会带来任何性能缺陷?或者clr是否足够聪明,可以忽略它?还是我最好检查一下 StatusChanged 在触发事件之前处理程序?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mehrdad Afshari    15 年前

    是的,clr并没有足够的智能来忽略它,但是在大多数情况下,差异应该可以忽略不计。

    方法调用不是什么大问题,不太可能对应用程序的性能产生有意义的影响。

        2
  •  1
  •   Sergey Teplyakov    15 年前

    如果您的应用程序每秒调用changestatus 1000次,那么这可能是一个问题。但只有探查器可以证明这一点。