Tag: manualresetevent

ManualResetEvent在处于等待状态时会消耗cpu吗?

更具体地说,上下文切换的性能下降是否适用于处于等待状态的线程? 在什么条件或情况下,ManualResetEvent或WaitHandle可能会消耗资源?

在ManualResetEvent或Thread.Sleep()之间做出选择

我不确定采用哪种策略……我专注于我的操作完成,但我也想将性能问题保持在最低限度……有一种名为Execute()的方法必须等待(同步运行)直到操作完成。 此操作发生在另一个线程上。 有两种方法可以实现同样的事情…… 通过使用ManualResetEvent void Execute() { taskHandle = new ManualResetEvent(false); . . //delegate task to another thread . . taskHandle.WaitOne(); } 要么 通过使用简单的while构造 void Execute() { . . //delegate task to another thread . . while (!JobCompleted) Thread.Sleep(1000); } 我应采用两种方法中的哪一种……为什么? 编辑: Q2。 如果我在构造时只是空了怎么办? 有什么不同…? while(!JobCompleted); 编辑:(之前我收集过的东西) http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml – 这篇文章说手动复制比较慢,因为它们离开了托管代码并重新进入……

ManualResetEvent与Thread.Sleep

我实现了以下后台处理线程,其中Jobs是Queue : static void WorkThread() { while (working) { var job; lock (Jobs) { if (Jobs.Count > 0) job = Jobs.Dequeue(); } if (job == null) { Thread.Sleep(1); } else { // [snip]: Process job. } } } 这导致在输入作业和实际开始运行之间出现明显的延迟(一次性输入一批作业,每个作业只相对较小)。延迟并不是很大,但我开始考虑这个问题,并做了以下改变: static ManualResetEvent _workerWait = new ManualResetEvent(false); // … if (job == null) { lock (_workerWait) { […]