سؤال

لدي مشكلة في تصميم مثيرة للاهتمام وكنت آمل أن تتمكن جميعًا من تقديم بعض الاقتراحات. أنا أستخدم C# و .NET 3.0

لديّ إطار عمل لطيف للغاية قابل للتمديد مبني على قمة WCF يقوم بأتمتة إعداد نقاط النهاية وإنشاء العقود. يمكن تشغيل النظام الذي أعمل فيه بطرق مختلفة - يمكن أن تكون نقاط النهاية في مكان آخر على الإنترنت ، أو يعمل في مجموعات مختلفة في نفس المربع ، أو حتى التشغيل في نفس العملية. يعد WCF رائعًا لجعل كل هذا شفافًا ، لكن في الحالة الأخيرة ، أود تحسين الكفاءة:

أحب أن أتجنب النفقات العامة للأجسام التسلسلية التي لا تسير في أي مكان. لا يوجد أي فائدة في القيام بذلك للتواصل بين خيطين في نفس التجمع. في الوقت نفسه ، أود الاستفادة من الإطار المستند إلى WCF الموجود بالفعل ، لأنه سيكون من الأسهل بكثير الحفاظ عليه إذا لم يكن لدينا مساران اتصال منفصلان اعتمادًا على إعداد النظام.

كانت فكرتي الأولى هي استخدام مؤشرات الكائن في سياق غير آمن - لعدم محاربة التسلسل ، ولكن لتسلية الحد الأدنى للمبلغ فقط. ما يقلقني من ذلك هو أنه على الرسائل غير المتزامنة في البيئات التي تكون فيها GC عدوانية ، قد تكون الرسالة قد تختفي وربما ستزول قبل أن تتاح لنا الفرصة للتخلي عن المؤشر الوارد فيه ، مما سيؤدي إلى الكثير من القضايا.

كانت فكرتي التالية هي استخدام Gchandles ، لكنني غير متأكد من سلوكهم - إذا لم يعد Gchandle مشير إليه بعد الآن ، ولكنه يحتوي على إشارة إلى كائن مُدار ، يتم تنظيف كلاهما بواسطة GC ، أو لا؟ أنا قلق بشأن تقديم تسرب ذاكرة ضخم باستخدام هذه ، لأن فرصة أن تضيع الرسالة رائعة ، ولن نتمكن من الاتصال بـ Free () ، والوثائق التي يمكنني العثور عليها هي ... تفتقر إلى .

هناك فكرة أخرى هي استخدام الانعكاس للنظر في جميع الكائنات المدارة ، ولكن يبدو أن النفقات العامة لهذا سيكون ضخمًا ، ويجب أن يكون هذا النظام فعالًا قدر الإمكان.

لذلك ، باختصار ، أحاول إرسال كائن عبر عملية مع WCF دون تخصيصه ، وهو ما أستطيع أن أقوله يعني إبقائه على قيد الحياة حتى لو لم يكن له أي مراجع مؤقتًا. يبدو أنه يجب أن يكون ذلك ممكنًا ، لكنني أتساءل عما إذا كنت أحاول الحصول على كعكتي وأكلها أيضًا.

شكرا جزيلا على المدخلات الخاصة بك!

هل كانت مفيدة؟

المحلول

أود أن أتحقق من بروتوكول النقل "NetNamedPipes" في WCF والذي تم تصميمه خصيصًا للاتصالات ذات العمليات نفسها ، والذي يحتوي على أقل إمكانية (بما في ذلك التسلسل الثنائي السريع).

مارك

نصائح أخرى

تحقق من ملزمة النقل الفارغة في هذه المقالة.

http://www.codeproject.com/kb/wcf/nulltransportforwcf.aspx

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top