2009-02-17 24 views
9

के साथ संचार की सबसे तेज़ विधि हम एक ऐसी सेवा चला रहे हैं जिसके लिए किसी अन्य प्रक्रिया के साथ तेज़ संचार की आवश्यकता है। वर्तमान में हम सेवा में विधियों को आमंत्रित करने के लिए buffered मोड में WCF NetNamedPipeBinding का उपयोग कर रहे हैं, जो उपलब्ध डब्ल्यूसीएफ बाइंडिंग के कम से कम ओवरहेड की पेशकश करता है। क्या प्रबंधित कोड का उपयोग करके ऐसा करने का कोई तेज़ तरीका है?विंडोज सेवा

संपादित करें: नीचे सुझाए गए अनुरोधों को बंचिंग अनुरोध पहले से ही एक विकल्प माना जाता है। असल में, हम सोच रहे हैं कि इंटर-प्रोसेस कॉम के लिए एक वैकल्पिक एपीआई है या नहीं, जो नामित पाइप का उपयोग करके डब्ल्यूसीएफ से बेहतर प्रदर्शन करती है।

उत्तर

8

यदि आप डब्ल्यूसीएफ का उपयोग कर रहे हैं तो नामित पाइप स्थानीय सिस्टम पर संवाद करने का सबसे तेज़ तरीका है।

आप डेटा की एक पूरी बहुत कुछ फेंक रहे हैं तो चारों ओर आप अपने एपीआई स्ट्रीमिंग (बस पैरामीटर के रूप में एक System.IO.Stream जोड़ा बजाय एक सरणी या स्ट्रिंग आदि गुजर) के लिए

इसके अलावा इस पर गौर कर सकता है प्रदर्शन, आपके होस्टिंग मॉडल सेवा के आपके इंस्टेंस मोड के संबंध में भी बहुत महत्वपूर्ण है। डब्ल्यूसीएफ पर जुवाल लोवी की किताब वास्तव में वास्तव में अच्छी है जब आप अपनी पुस्तक के मांस में कोड उदाहरणों को पार करते हैं।

संपादित करें: अपनी टिप्पणी के जवाब में, "सेवाबेहायर" विशेषता पर एक नज़र डालें, जिसे आप सेवा परिभाषा पर लागू कर सकते हैं। (आपका IServiceInterface विवरण नहीं, बल्कि आपकी कक्षा का ठोस कार्यान्वयन)।

आप अपने कोड को PerCall, PerSession या Singleton द्वारा उदाहरण के लिए परिभाषित कर सकते हैं। डिफॉल्ट सिंगलटन पर्सेशन (धन्यवाद @ रिचर्डोड) एकल पर सेट किया गया है और इंस्टेंस कॉन्टेक्स्ट मोड सही पर सेट है, जो आपको विंडोज़ फॉर्म पर डब्ल्यूसीएफ होस्ट करने की अनुमति देता है और आपको पैर में खुद को शूटिंग से रोकता है अगर आप समझ में नहीं आते instancing।

मूल रूप से यदि आप इसे डिफ़ॉल्ट पर छोड़ देते हैं, तो आप एक थ्रेडेड, अनुक्रमिक रूप से प्रसंस्कृत डब्ल्यूसीएफ होस्ट के साथ समाप्त होते हैं।

एमएसडीएन के पास प्रत्येक प्रकार के बारे में कुछ उचित जानकारी है।

+0

स्पेंस, क्या आप "सेवा के उदाहरण मोड" के द्वारा अपना मतलब समझ सकते हैं। वर्तमान में यह एक स्वयं होस्टेड सर्विसहोस्ट के रूप में चलता है, जो बदले में एक मानक विंडोज सेवा – spender

+2

@ स्पेस में होस्ट किया जाता है। डिफॉल्ट सिंगलटन नहीं है, यह चैनल पर समर्थन करता है कि चैनल सत्र का समर्थन करता है या नहीं। – RichardOD

+0

@RichardOD के लिए 1 बिंदु। मेरी माफ़ी, उलझन में कि ConcurrencyMode एकल के डिफ़ॉल्ट के साथ, जो बिंदु मैं प्राप्त करने की कोशिश कर रहा था, डिफ़ॉल्ट सेटिंग्स शून्य concurrency हैं जो स्केलेबिलिटी को प्रभावित करेगा। – Spence

3

ठीक है, क्या आप मात्राबद्ध हैं (यानी बड़े संदेश) या राउंड-ट्रिप बाध्य (बहुत सारे छोटे संदेश)?

बड़े संदेशों के लिए, संपीड़न पर विचार करें (यदि नेटवर्क आईओ ओवरहेड है) या प्रोटोबफ-नेट जैसे अधिक कुशल क्रमिकरण।

चैट एपीआई के लिए, कम राउंड ट्रिप लेने के लिए संदेशों को घुमाने पर विचार करें।

+0

यह एक चिपचिपा एपीआई के अधिक होने जा रहा है। इसकी purpopses में से एक वेब पेज से स्वत: पूर्ण अनुरोध की सेवा है, इसलिए इस मामले में गुच्छा एक विकल्प नहीं होगा, लेकिन अन्य मामलों में यह दो और दस गुना के बीच यातायात को कम करना चाहिए। – spender