- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
ManualResetEventSlim
状态的 MSDN 文档
You can use this class for better performance than
ManualResetEvent
when wait times are expected to be very short.
“很短”有多长?在什么时候使用带有 ManualResetEvent
的内核对象的好处会超过实例化它的开销?
最佳答案
这是我发现的,希望其他人可以验证这一点,但这是我在阅读 Reference Source for ManualResetEventSlim 时发现的
ManualResetEventSlim
它试图根据处理器的数量进行休眠和屈服,并进行极短的休眠——1 毫秒或 0 毫秒,具体取决于其当前的自旋指数。如果时间仍然不够,它将恢复使用 Monitor.Wait
,使用最初传入的超时的新更新版本。
为 Thread.Sleep 传入 0 会释放其时间片。
手动重置事件
它使用 WaitHandle
并调用本地方法来处理指定时间的等待。不幸的是,我看不到它在做什么。
我的结论
“非常短”意味着只有几毫秒。
编辑:我刚刚发现这些有很多信息:
关于c# - ManualResetEventSlim 建议的等待时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310551/
C# 中单次自旋有多长?我想知道的是有一个 ManualResetEventSlim 有一个 spinCount 参数,我想知道每次旋转的时间(以毫秒为单位)或者它是如何工作的?我知道旋转对于短等待比
ManualResetEventSlim 状态的 MSDN 文档 You can use this class for better performance than ManualResetEvent
我正在尝试使用 ManualResetEventSlim 类在几个并行任务之间进行通信。 这是代码的简化版本: class Program { private static void Main
我正在阅读 ManualResetEventSlim's Reference . 它说的是什么意思: A common use of MRES.WaitHandle is to use MRES as
从 NET 4 开始,我可以使用 ManualResetEventSlim 类,它在阻塞之前稍微旋转一下,以便在阻塞时间很短的情况下获得时间优化(我没有上下文切换)。 我想使用基准来衡量这次的时间有多
给定以下代码: CancellationTokenSource cts = new CancellationTokenSource(); ManualResetEventSlim mre = new
ManualResetEventSlim:调用 .Set() 后立即调用 .Reset() 不会释放任何等待线程 (注意:ManualResetEvent 也会发生这种情况,而不仅仅是 ManualR
我是一名优秀的程序员,十分优秀!