AutoResetEvent / ManualResetEvent消耗什么资源?

本文关键字:什么 资源 ManualResetEvent AutoResetEvent | 更新日期: 2023-09-27 18:09:01

c# ManualResetEvent和AutoResetEvent类的创建和维护是否昂贵?

它们是否消耗了某种有限的Windows内核资源,如果是,它有多有限?

。如果我有代码,可以创建一个新的AutoResetEvent每100毫秒(稍后处理),我应该担心把旧的AutoResetEvents在一个池和重用他们,还是这不是一个重要的问题?

既然它们是一次性的,我假设它们消耗了某种有限的资源。他们到底消耗了多少,在什么情况下我应该开始担心使用太多了?

有一个ManualResetEventSlim,但没有AutoResetEventSlim的事实也让我有点担心。

AutoResetEvent / ManualResetEvent消耗什么资源?

ManualResetEvent使用等待句柄而ManualResetEventSlim使用忙碌旋转

最佳性能依次为:1)标准锁定(Monitor) 2)"精简"事件类3)标准事件类

给定您的用例,我建议使用"精简"类,因为您只需要等待很短的时间。同样,如果一个"精简"类等待的时间太长,它的行为就会像一个"非精简"类。

注意不能跨进程使用"slim"类。


编辑:这就是为什么AutoResetEvent没有一个"精简"的版本-基本上是因为AutoResetEvent的等待时间通常比ManualResetEvent长,所以使用"忙碌旋转"是不合适的


编辑:等待句柄继承自MarshalByRefObject。最终。net运行时设置了一个代理(TransparentProxy类)来远程访问你的等待句柄。

更多信息请参见此处和此处。