2009-03-06 25 views
6

के साथ इन-प्रोसेस संचार डिज़ाइन में मेरे पास एक दिलचस्प डिज़ाइन समस्या है और मैं उम्मीद कर रहा था कि आप सभी कुछ सुझाव दे सकते हैं। मैं सी # और .NET 3.0डब्ल्यूसीएफ (.NET)

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

मुझे उन वस्तुओं को क्रमबद्ध करने के ऊपरी हिस्से से बचना अच्छा लगेगा जो वास्तव में कहीं भी नहीं जा रहे हैं। एक ही असेंबली में दो धागे के बीच संवाद करने के लिए वास्तव में ऐसा करने में कोई बात नहीं है। साथ ही, मैं डब्ल्यूसीएफ-आधारित ढांचे का उपयोग करना चाहता हूं जो पहले से ही मौजूद है, क्योंकि अगर हमारे पास सिस्टम के सेटअप के आधार पर दो अलग संचार मार्ग नहीं हैं तो यह बनाए रखना बहुत आसान होगा।

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

मेरा अगला विचार जीसीएचंडल्स का उपयोग करना था, लेकिन मुझे उनके व्यवहार के बारे में अनिश्चितता है - अगर कोई जीसीएचंडल का संदर्भ नहीं दिया गया है, लेकिन किसी प्रबंधित ऑब्जेक्ट का संदर्भ शामिल है, तो दोनों जीसी द्वारा साफ किए गए हैं, या न ही? मैं इनका उपयोग करके एक बड़ी मेमोरी लीक पेश करने के बारे में चिंतित हूं, क्योंकि एक संदेश खो जाने का मौका बहुत अच्छा है, और हम फ्री() को कॉल करने में सक्षम नहीं होंगे, और मुझे जो दस्तावेज मिल सकता है वह है ... कमी ।

एक और विचार सभी प्रबंधित वस्तुओं को देखने के लिए प्रतिबिंब का उपयोग करना है, लेकिन ऐसा लगता है कि इसके लिए ओवरहेड बहुत बड़ा होगा, और यह प्रणाली यथासंभव कुशल होनी चाहिए।

तो संक्षेप में, मैं बिना किसी प्रक्रिया के डब्ल्यूसीएफ के साथ एक प्रक्रिया में एक ऑब्जेक्ट भेजने की कोशिश कर रहा हूं, जहां तक ​​मैं कह सकता हूं कि इसे अस्थायी रूप से कोई संदर्भ नहीं होने पर भी इसे जीवित रखना है। ऐसा लगता है कि यह संभव होना चाहिए, लेकिन मुझे आश्चर्य है कि क्या मैं अपना केक लेने और इसे भी खाने की कोशिश कर रहा हूं।

आपके इनपुट के लिए बहुत बहुत धन्यवाद!

उत्तर

6

मैं डब्ल्यूसीएफ में "नेटनामयुक्त पाइप" परिवहन प्रोटोकॉल की जांच करता हूं जो विशेष रूप से उसी मशीन, इंटर-प्रोसेस संचार के लिए डिज़ाइन किया गया है और जिसमें कम से कम ओवरहेड संभव है (फास्ट बाइनरी सीरियलाइजेशन सहित)।

मार्क

9

इस आलेख में शून्य परिवहन बाध्यकारी देखें।

http://www.codeproject.com/KB/WCF/NullTransportForWCF.aspx

+0

अच्छा विचार है, इस कार्यान्वयन मेरे लिए हालांकि काम नहीं करता है, और मैं में 'NullChannelFactory \' 1.OnBeginOpen (TimeSpan टाइमआउट, AsyncCallback कॉलबैक, वस्तु राज्य) 'एक' System.NotImplementedException' मिलता है। चूंकि इस परियोजना को खुले नहीं किया गया है, यह विस्तार और योगदान करने के लिए सीधा नहीं है। –