لماذا أستخدم نموذج ترابط COM "كلاهما" بدلاً من "مجاني"؟

StackOverflow https://stackoverflow.com/questions/1824397

سؤال

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

أفهم الآن أن القدرة على تسجيل الكائن الخاص بي على أنه يستخدم نموذج الترابط "المجاني" هو أمر مفيد وقد يكون من المفيد دفع ثمن جعله آمنًا تمامًا للترابط.ولكن لماذا أرغب في القيام بنفس الشيء وتسجيل الكائن الخاص بي باستخدام نموذج الترابط "كلاهما" بدلاً من ذلك؟ماذا ستكون الميزة؟كيف أختار بين "كلاهما" و"المجاني"؟

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

المحلول

كلا نموذج الخيوط

السبب الرئيسي لوضع علامة على المكون الخاص بك كدعم لنموذج مؤشر الترابط "كلاهما" هو تحسينات الأداء عندما يتم استدعاء المكون من شقة مترابطة مفردة (STA).

إذا قمت بوضع علامة على المكون الخاص بك كـ MTA وتم إنشاء المكون الخاص بك من داخل STA، فسيتم إنشاء المكون الخاص بك في قسم MTA منفصل و "قد يؤدي التنظيم الناتج بين الوحدات إلى انخفاض الأداء بدرجة كافية لإبطال كل العمل المبذول في إنشاء مكون فعال ومترابط".ومع ذلك، إذا تم وضع علامة "كلاهما" على نموذج الترابط الخاص بالمكون الخاص بك، فسيتم إنشاؤه داخل قسم كائن STA ويمكن الوصول إليه مباشرة.

لذا، إذا كنت تعتقد أنه قد يتم استدعاء المكون الخاص بك من داخل STA (جميع كائنات VB6 COM هي STA)، فقد ترغب في وضع علامة على نموذج الترابط على أنه "كلاهما".

مقالة KB جيدة حول نماذج خيوط OLE.

نموذج خيوط مجاني

قد ترغب في استخدام نموذج مؤشر ترابط "مجاني" إذا كان المكون الخاص بك يستخدم مكونات أخرى تحمل علامة "مجانية".إذا تم وضع علامة على المكون الخاص بك كـ "كلاهما"، فمن الممكن أن يكون هناك تبديل كبير للمساحة بين المكون "كلاهما" الذي يعمل في STA وMTA.كقاعدة عامة، حاول إنشاء المكون بالقرب من المتصل قدر الإمكان (أي:نفس الشقة) بينما يعمل بشكل صحيح في جميع السيناريوهات.

الموقف الآخر الذي قد يستدعي وضع علامة على المكون الخاص بك على أنه "مجاني" هو إذا تم حظره بشكل صريح (على سبيل المثال.الموضوع.النوم).إذا تم وضع علامة على المكون كـ "كلاهما" وتم إنشاء مثيل له في STA، فسيقوم المكون بحظر مضخة رسائل STA.

اعتبارات وسيناريوهات أخرى

إذا كنت تخطط لاستخدام المكون في IIS، فهناك أشياء أخرى يجب مراعاتها.بالنسبة لـ IIS، يعتبر "كلاهما" هو الإعداد الموصى به.بشكل أساسي لتجنب مشكلات القفل المتعلقة بالمكونات المترابطة الخاصة بالشقة، والوصول الفعال إلى COM+ ObjectContext وحقيقة أن المكونات المترابطة "المجانية" تستخدم سياق أمان النظام (إذا كنت تحتاج إلى الوصول إلى سياق الأمان الخاص بالمستخدم).يرى تحديد نموذج الترابط للمكونات في IIS لمزيد من المعلومات حول اعتبارات ترابط IIS.

الأشياء الأخرى التي يجب مراعاتها هي دعم COM+ وكيفية تصرف المكونات الخاصة بك إذا تم تشغيلها في COM+ وما إذا كان يتم تمرير مؤشرات الواجهة وتخزينها.

مقالة ممتازة هي خيوط COM وهندسة التطبيقات في تطبيقات COM+.يحتوي على تركيز COM+ ولكنه يناقش COM أيضًا.بالنسبة لسؤالك، اقرأ القسم المعنون "توصيات نماذج الترابط".لقد قامت Microsoft بإزالة المقالة الأصلية لذا أقوم بربط نسخة منها.

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