c# - 使用事件有多少性能开销?

标签 c# oop

我对编程还很陌生,而且我对 OOP 的了解有限,因此决定使用事件在我的类之间进行通信。自然,这会导致很多事件。

我想知道使用事件是否有任何额外开销?我假设除非对事件采取行动(即类中有一个监听器根据被触发的事件执行函数),否则实际上不会有太大影响。但我对 C# 中的事件不是很熟悉,只是想确认是否仅仅为了触发一个事件而产生显着的额外开销?

最佳答案

为了防止多年后有人偶然发现这个问题,我使用了 BenchMarkDotNet 框架来衡量事件调用所需的时间。我区分了 1 个订阅者和 100 个订阅者。

使用的测试代码:

private event EventHandler TestEventSingle;
private event EventHandler TestEventMultiple;

public OtherTests()
{
    TestEventSingle += OtherTests_TestEvent;

    for (int i = 0; i < 100; i++)
    {
        TestEventMultiple += OtherTests_TestEventMultiple;
    }
}

private void OtherTests_TestEventMultiple(object sender, EventArgs e)
{
    //Do something with the event...
}

private void OtherTests_TestEvent(object sender, EventArgs e)
{
    //Do something with the event...
}

[Benchmark]
public void InvokeEvent()
{
    TestEventSingle.Invoke(this, null);
}
[Benchmark]
public void InvokeEventMore()
{
    TestEventMultiple.Invoke(this, null);
}
[Benchmark]
public void CallMethod()
{
    OtherTests_TestEvent(this, null);
}
[Benchmark]
public void CallMethodMore()
{
    for (int i = 0; i < 100; i++)
    {
        OtherTests_TestEventMultiple(this, null);
    }
}

测试结果:

<表类="s-表"> <头> 方法 均值 错误 标准偏差 <正文> 调用事件 1.6774 纳秒 0.0246 纳秒 0.0230 纳秒 调用事件更多 192.2076 纳秒 3.6115 纳秒 3.3782 纳秒 调用方法 0.0317纳秒 0.0106 纳秒 0.0099 纳秒 调用方法更多 37.1203 纳秒 0.4147 纳秒 0.3676 纳秒

关于c# - 使用事件有多少性能开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645033/

相关文章:

objective-c - 继承的@property 不能满足 <protocol> @property 吗?

c# - 从 ListView 中删除最后一行

c# - Entity Framework 迁移 - 启用 AutoMigrations 以及添加的迁移

c# - 当我启动另一个进程时程序突然退出

string - 使用 Bash/Perl 根据每个文件的名称修改文件

带有嵌套对象字面量的 javascript 访问链

c# - 创建实例时绝对奇怪的行为

c# - 使用阻塞集合创建文件拾取过程

java - 将父类(super class)传递到需要子类的方法中

java - 为什么自定义异常 java 类应该是最终的