कतार की निगरानी करने का सबसे प्रभावी तरीका क्या है।कतार की निगरानी करने के लिए सबसे प्रभावी तरीका
कोड की 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 की गणना से शून्य से अधिक हो जाती है?
नहीं सोता है जब तक आप निर्माता के ऊपर कोई नियंत्रण है। उचित प्रतीक्षा/अधिसूचनाएं करने के लिए घटनाओं या संकेतों का उपयोग करें। –
मैट क्यों? मेरे पास निर्माता पर नियंत्रण है। क्या मुझे कतार में कोई आइटम जोड़ा जाने पर एक घटना को उठाया जाना चाहिए? मैं waithandle में देखेंगे। – AndyMM
+1। एक उदाहरण के लिए मेरा जवाब देखें। – dtb