【发布时间】:2009-06-23 15:09:23
【问题描述】:
监控队列最有效的方法是什么。
以下代码是最大的资源消耗:
/// <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));
}
}
}
}
}
Start Service 在后台线程上运行,对 _MessageQueue.Count 的调用不是线程安全的,我没有锁定 MessageQueue 中的计数。但是,我确实锁定了 _MessageQueue.GetMessageFromQueue 的实现。 我采取的方法有效吗?每次队列从 0 计数到大于零时,我是否应该引发一个事件?
【问题讨论】:
标签: c# .net performance