监控队列的最有效方式是什么?监控队列的最有效方式
的follwoing一段代码是资源最大的猪:
/// <summary>
/// Starts the service.
/// </summary>
private void StartService()
{
while (true)
{
//the check on count is not thread safe
while (_MessageQueue.Count > 0)
{
Common.IMessage message;
// the call to GetMessageFromQueue is thread safe
if (_MessageQueue.GetMessageFromQueue(out message) == true)
{
if (message.RoutingInfo == Devices.Common.MessageRoutingInfo.ToDevice)
{
_Port.SerialPort.WriteLine(message.Message);
}
if (message.RoutingInfo == Devices.Common.MessageRoutingInfo.FromDevice)
{
OnDeviceMessageReceived(new Common.DeviceMessageArgs(message.Message));
}
}
}
}
}
启动服务运行在后台线程调用_MessageQueue.Count不是线程安全的,我不是的MessageQueue锁定的计数。然而,我确实锁定了_MessageQueue.GetMessageFromQueue的实现。 我对这种高效率的方式有所了解吗?我是否应该提出一个事件每当队列从0计数到大于零时?
不睡觉,除非你有过生产没有任何控制。使用事件或信号做适当的等待/通知。 – 2009-06-23 15:34:53
为什么选择Mats?我控制着制片人。当一个项目被添加到队列中时,我应该提出一个事件吗?我会考虑等待处理。 – AndyMM 2009-06-23 15:49:25