سؤال

هل هناك طريقة سهلة للوصول إلى بيانات التكوين القائم على النظام.

فصول System.configuration، مثل معظم فئات أخرى (كل شيء) في وثائق مكتبة .NET في Microsoft في Microsoft.

أي عدد ثابت (مشترك في Visual Basic) أعضاء هذا النوع هم مؤشر ترابط آمن. أي أعضاء مثيل غير مضمون ليكون آمنا للخيط.

من قراءتي لهذا، ConfigurationSection الكائنات التي تم إرجاعها من ConfigurationManager.GetSection(string) وغيرها من الطرق المماثلة (على سبيل المثال OpenExeConfiguration(string exePath).GetSection(string)) يجب ألا يفترض أن تكون آمنة للخيط وبالتالي لا ينبغي أن تستخدمها سياقات تنفيذ متعددة. هذا يحظر تخزين أ ConfigurationSection في Singleton من شأنها أن تكون آمنة للخيط لأنه أثناء الوصول إلى كائن القسم قد يكون آمنا، فإن الأعضاء على الكائن نفسه غير آمنين.

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

لذلك، هل هناك طريقة للاستخدام System.Configuration بطريقة آمنة للخيط دون اللجوء إلى التحليل الزائد وتخصيص أقسام التكوين؟ هل ينفذ بنفسك ConfigurationSection مجانا أنت من عدم وجود ضمان مقدمة من قبل Microsoft على الرغم من أنك تصل إلى ذلك من خلال System.Configuration واجهات (وإذا كان الأمر كذلك، كيف يمكنك تنفيذها لتكون آمنة للخيط عند الوصول إلى القاعدة ConfigurationSectionمطلوب مفهرس للوصول إلى البيانات المكونة)؟

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

المحلول

المثيل الذي تم إرجاعه من Gensection ليس آمنا للخيط. هذا يعني أنك بحاجة إلى إضافة رمز القفل من أجل استخدامه في Singleton الخاص بك.

لا تقوم عدة مكالمات بعدم تحليل الملف، ما لم يتغير الملف. يتم تخزين البيانات مؤقتا في الذاكرة.

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

نصائح أخرى

ConfignIgrormanager.getSection (سلسلة) عضو ثابت عام، وبينما تنص MSDN "أي ثابتة قانونية (مشتركة في Visual Basic) من هذا النوع من الخيط آمن"، يمكنك أن تفترض أنها آمنة للاستخدام.

أما بالنسبة للأداء، سأكون على استعداد لافتراض أن MS جعلتها فعالة للغاية بالفعل واستخدام وظائفها كما هي. تذكر: الأمثل المبكر هو جذر الشر.

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