在ManualResetEventSlim中单次旋转多长时间

c#中的单个旋转多长时间? 我想知道的是有一个具有spinCount参数的ManualResetEventSlim,我想知道每次旋转的时间是多少,或者它是如何工作的? 我知道,对于短等待而言,旋转比内核等待更有效。 所以我只是想看看我应该为这个通常需要2-10秒的工作设置这个值。

旋转计数意味着很小。 默认值为10(如果在单个处理器上运行,则为1)。 如果使用允许指定旋转计数的构造函数,则允许的最大值为2047.如果事件没有很快发出信号,则ManualResetEventSlim使用常规事件句柄等待。 正如@HenkHolterman提到的那样,所涉及的时间远远小于秒。 我们说的是周期,而不是几秒甚至几毫秒。

http://msdn.microsoft.com/en-us/library/5hbefs30.aspx

在.NET Framework版本4中,您可以使用System.Threading.ManualResetEventSlim类,以便在预期等待时间非常短且事件未跨越进程边界时获得更好的性能。 ManualResetEventSlim在等待事件发出信号时短时间使用忙碌旋转。 当等待时间很短时,旋转可以比等待使用等待句柄便宜得多。 但是,如果事件未在特定时间段内发出信号,则ManualResetEventSlim将转向常规事件句柄等待。

http://msdn.microsoft.com/en-us/library/ee722114.aspx

在多核计算机上,当预计资源不会长时间保持时,等待线程在用户模式下旋转几十个或几百个周期会更有效,然后重试获取资源。 如果资源在旋转后可用,那么您已经保存了数千个周期。 如果资源仍然不可用,那么您只花了几个周期,仍然可以进入基于内核的等待。

编辑:直接回答你的问题,单个旋转的时间长度无法明确回答,因为它取决于它运行的硬件。 http://msdn.microsoft.com/en-us/library/system.threading.thread.spinwait(v=vs.95).aspx

SpinWait本质上将处理器置于一个非常紧密的循环中,循环计数由iterations参数指定。 因此,等待的持续时间取决于处理器的速度。