मेरे पास netNamedPipeBinding
बाध्यकारी के साथ कंसोल में स्वयं-होस्टेड डब्ल्यूसीएफ सेवा है। सेवा सिर्फ एक खाली विधि है Send(DataTable bulk)
डब्ल्यूसीएफ क्यूई सेवा से एमएसएमक्यू तेज क्यों है?
[ServiceContract]
public interface IWcfQueueService
{
[OperationContract]
void Send(DataTable bulk);
}
public class WcfQueueService : IWcfQueueService
{
public void Send(DataTable bulk)
{
// Here would be something like _bulks.Add(bulk);
// BUT, for now it is empty method and still it's slower than MSMQ
}
}
मेरे क्लाइंट डीबी से 200K आदानों हो जाता है और हमारे BoundedThreadPool साथ इसे संसाधित (केवल बनाता है, चलो कहते हैं, 20 धागे)। प्रत्येक इनपुट को विभिन्न धागे से संसाधित किया जाता है। प्रत्येक थ्रेड MyMethod
निष्पादित करता है और MyMethod
के अंत में परिणाम bulkManager
में जोड़ा जाता है।
public void MyMethod(string input)
{
var res = ProcessInput(input);
bulkManager.Add(res);
}
जब bulkManager
जम एन आइटम (= थोक) यह थोक एक और धागा सब यह होता है दो तरीकों में से एक के साथ कि थोक को कतारबद्ध है कि करने के लिए पारित:
- तो WCF सक्षम:
wcfQueueService.Send(bulk);
- किसी और अगर MSMQ सक्षम:
new MessageQueue(@".\private$\q").Send(new Message {Body = bulk});
सभी दो तरीकों से काम करता है, लेकिन MSMQ और अधिक तेजी से काम करता है। एमएसएमक्यू क्लाइंट 20 सेकेंड में लगभग 80 के थोक को संसाधित करने का प्रबंधन करता है जबकि डब्ल्यूसीएफ केवल 20 के -30 के थोक के साथ होता है। मुझे समझ में नहीं आता कि ऐसा क्यों होता है। एमएसएमक्यू जैसी विभिन्न प्रक्रियाओं में मेरा डब्ल्यूसीएफ चलता है। इसके अलावा, मेरा डब्ल्यूसीएफ कुछ भी स्टोर नहीं करता है, इसमें खाली विधि है। तो एमएसएमक्यू ने डब्ल्यूसीएफ क्यों जीता?
अपडेट किया गया leppie
के रूप में सुझाव दिया मैं .NetRemoting की कोशिश की। NetRemoting वास्तव में गति में सुधार हुआ। ग्राहक 60K संसाधित किया। लेकिन,
- यह मैंने पढ़ा है के रूप में नेट दूरस्थ WCF द्वारा हटा दिया गया है और WCF this के अनुसार नेट दूरस्थ तुलना में तेजी से होना चाहिए, तो क्यों मुझे लगता है कि मेरी WCF धीमी है पाने के लिए अभी भी MSMQ
- की तुलना में धीमी है? शायद मेरा बाध्यकारी गलत है?
आपको शायद एमएसएमक्यू (नामित पाइप दिए गए, मैं स्थानीय मशीन पर आईपीसी मानता हूं) से बहुत तेज़ रिमोटिंग मिल जाएगा। – leppie
@leppie, नेट रीमोटिंग ने वास्तव में गति में सुधार किया। ग्राहक 60K संसाधित किया। लेकिन, 1 - यह अभी भी एमएसएमक्यू की तुलना में धीमी है और 2- जैसा कि मैंने पढ़ा है। डब्ल्यूसीएफ द्वारा डॉट रीमोटिंग को हटा दिया गया है और डब्ल्यूसीएफ को http://msdn.microsoft.com/en-us/library/bb310550 के अनुसार नेट रीमोटिंग से तेज होना चाहिए। .aspx # wcfperform_topic3d, तो मुझे क्यों लगता है कि मेरा डब्ल्यूसीएफ धीमा है? – theateist
@theateist: क्या आप सेवा पर 'सिंगल' और 'ConcurrencyMode'' को 'एकाधिक' में अपना 'InstanceContextMode' बदल सकते हैं? फिर एक और परीक्षण करें। थ्रॉटलिंग सेटिंग्स को समायोजित करने का प्रयास करें (सेवा व्यवहार में)। –