تخزين المحلي لمؤشر الترابط: مؤشر ترابط-نسبة ثابت حقول فتحات و بيانات
يمكنك استخدام مؤشر ترابط المدارة بتخزين محلي (TLS) لتخزين بيانات التي هو فريدة بالنسبة لمجال مسار التنفيذ وتطبيق. يوفر إطار عمل.NET طريقتين إلى TLS إدارتها باستخدام: حقول ثابتة من مؤشر ترابط خاص و فتحات البيانات.
استخدام مؤشر ترابط خاص ثابت الحقول (مؤشر ترابط خاص Sharedالحقول في Visual أساسى) إذا توقعت أن احتياجاتك الدقيقة في وقت التحويل البرمجي. مؤشر ترابط-توفر حقول ثابت نسبي للحصول على أفضل أداء. أن يمنحك أيضا الفوائد التي ستنجم عن وقت التحويل البرمجي نوع التدقيق.
استخدم فتحات بيانات عند قد يتم اكتشاف المتطلبات الفعلية الخاصة بك فقط عند تشغيل الوقت. فتحات بيانات تكون أبطأ وأكثر awkward لاستخدام من مؤشر ترابط خاص حقول ثابتة وبيانات هو تخزين الكتابة Object، لذا يجب تحويل إلى النوع الصحيح قبل استخدام it.
في C + + غير مدار، يمكنك استخدام TlsAllocإلى يخصص فتحات بشكل حيوي و __declspec(thread)إلى تقوم بتعريف متغير يجب أن يتم يخصصها في مؤشر ترابط خاص sإلىrage. حقول ثابتة من مؤشر ترابط خاص و توفر فتحات البيانات المدارة الإصدار هذا سلوك.
في .NET Framework الإصدار 4، يمكنك استخدام System.Threading.ThreadLocal<T>الفئة لإنشاء الكائنات المحلية مؤشر ترابط الذي يتم تهيئة ببط عند الكائن هو أولاً استهلاكه. لمزيد من المعلومات، راجع تهيئة البطيئة.
تفرد بيانات في TLS مدارة
ما إذا كنت تستخدم حقول ثابتة من مؤشر ترابط خاص أو بيانات فتحات، بيانات في TLS المدارة هو فريدة بالنسبة إلى مجموعة مجال مسار التنفيذ وتطبيق.
داخل مجال تطبيق، مؤشر ترابط واحد لا يمكن تعديل بيانات من مؤشر ترابط آخر، حتى في حالة استخدام كل من عمليات جزئية لنفس حقل أو فتحه.
يصل عند قيام مؤشر ترابط إلى نفس الحقل أو فتحه من عدة مجالات تطبيق، قيمة منفصلة هو في كل مجال تطبيق.
على سبيل المثال، إذا كان مؤشر ترابط يقوم بتعيين قيمة حقل ثابت مؤشر ترابط خاص، يدخل مجال تطبيق آخر، و ثم استرداد قيمة الحقل، والقيمة التي يتم استردادها في مجال التطبيق الثاني تختلف عن القيمة الموجودة في مجال التطبيق أول. تعيين القيمة جديدة حقل في الثانية مجال تطبيق لا يؤثر على القيمة حقل's في مجال تطبيق أول.
وبالمثل، عندما يحصل مؤشر ترابط نفس الفتحة بيانات المسماة في المجالين مختلفاً للتطبيق، تبقى مستقلة عن بيانات في مجال تطبيق الثاني بيانات في مجال تطبيق أول.
مؤشر ترابط-حقول نسبي ثابت
إذا كنت تعرف أي piece بيانات هو فريدة دوماً إلى مجموعة مجال تطبيق، ومؤشر ترابط تطبيق ThreadStaticAttributeسمة إلى حقل ثابت. استخدم الحقل كما يمكن استخدام أي حقل ثابت آخر. بيانات الموجودة في الحقل فريدة إلى كل مؤشر ترابط الذي تستخدمه.
توفر حقول ثابتة لمؤشر ترابط خاص أداء أفضل من فتحات بيانات و أن الفائدة من يتم الآن التدقيق من نوع وقت التحويل البرمجي.
يجب أن تدرك أنه سيتم تشغيل أي رمز الدالة الإنشائية الفئة على مؤشر ترابط أول في سياق أول الذي يصل إلى الحقل. في الجميع عمليات جزئية أو غير ذلك سياقات في نفس مجال تطبيق، حقول سيتم تهيئة إلى null(Nothingin Visual أساسى) إذا كانوا أنواع مرجع أو بهم الافتراضي قيم إذا كانت قيمة أنواع. ولذلك، يجب أن لا اعتمدت تشغيل construcإلىrs الفئة إلى يهيّئ مؤشر ترابط خاص حقول ثابتة. بدلاً من ذلك، تجنب تهيئة مؤشر ترابط خاص حقول ثابتة و تفترض تهيئة null(Nothing) أو قيم الافتراضية الخاصة بها.
فتحات بيانات
يوفر إطار عمل.NET فتحات بيانات ديناميكي التي تعتبر فريدة بالنسبة إلى خليط من مؤشر ترابط و مجال تطبيق. هناك نوعين من فتحات بيانات: فتحات المسماة وغير المسماة فتحات. كلاهما يتم تطبيق باستخدام LocalDataStoreSlotبنية.
إلى إنشاء بيانات مسماة الفتحة، استخدم Thread.AllocateNamedDataSlotأو Thread.GetNamedDataSlotالأسلوب. للحصول على مرجع إلى فتحه المسماة موجودة، قم بتمرير اسمه إلى GetNamedDataSlotأسلوب.
إلى إنشاء إحدى فتحات بيانات غير مسمى، استخدم Thread.AllocateDataSlotالأسلوب.
لكل منهما المسماة وغير المسماة فتحات، استخدام Thread.SetDataو Thread.GetDataوظائف إلى تعيين واسترداد المعلومات الموجودة في الفتحة. هذه هي الأساليب الثابتة التي تعمل دائماً تشغيل بيانات لمؤشر الترابط الذي هو حاليا تنفيذ لها.
يمكن أن تكون فتحات المسماة ملائماً، لأنه يمكنك استرداد الفتحة عند الحاجة إليه بتمرير اسمه إلى GetNamedDataSlotأسلوب، بدلاً من الاحتفاظ بمرجع إلى عنصر فتحه غير مسمى. ومع ذلك، إذا كان مكون آخر يستخدم نفس الاسم للتخزين مؤشر ترابط خاص به ومؤشر ترابط تنفيذ تعليمات برمجية من كلاهما مكوّن الخاص بك والمكونات الأخرى، قد يلحق مكونين بيانات بعضها البعض. (هذا السيناريو يفترض أن تقوم بتشغيل كل من المكونات في نفس مجال تطبيق، وأنه لا مصممة إلى يجعله مشتركًا نفس بيانات.)