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

.net事件的性能影响

  •  9
  • Bronumski  · 技术社区  · 15 年前

    我理解误用背后的顾虑,我知道它们只是一个特殊的多播委托,但假设最多有一个侦听器,为什么在方法调用上使用事件会被认为是“昂贵的”?

    要清楚的是,这不是关于任何特定的实现,而是关于在方法调用上使用事件的成本的更一般的问题。

    3 回复  |  直到 13 年前
        1
  •  18
  •   Philip Rieck    13 年前

    在您的场景中测试它—我可以想象有很多很多因素会影响它,特别是当我们讨论的是相对成本很低的方法/委托调用时。

    一个快速简单的测试,发布版本不在调试器下,在4.0下编译为“任意cpu”,运行在64位windows 7上:

    另一个编辑 :哦,这是一个更好的结果。看到了吗 the code

    10000000 direct reference calls     :   0.011 s
    10000000 calls through an interface :   0.037 s
    10000000 invocations of an event    :   0.067 s
    10000000 calls through Action<int>  :   0.035 s
    

    因此,在一个有1000万个调用的直接“不做任何测试”中,一个事件会增加0.474秒[ 编辑 ,现在只有.026

    我更担心的是设计的正确性,而不是每1000万次调用就有半秒的时间,除非您希望在短时间内完成那么多的调用(在这种情况下,可能存在更基本的设计问题)。

        2
  •  12
  •   Wim Coenen    15 年前

    在.NET 2.0中 calling a delegate is just as fast 作为接口方法调用。他们甚至似乎快了一点。

    编辑 针对事件比委托慢的说法:事实上,事件 This code

        3
  •  4
  •   Ronald Wildenberg    15 年前

    表现绝对不是你应该关心的。你说的是纳秒。如果你只有一个听众,那就没有什么区别了。

    我只想考虑在您的应用程序中,使用事件或调用方法什么更有意义,然后选择最佳选项。主要区别在于 A 生成事件不必知道其侦听器。同一个物体 A