سؤال

أنا أعمل على مشروع .NET 4 ، وسأكون قادرًا على الاستفادة من الوصول إلى الممتلكات الديناميكية HyperDescriptor يوفر ، ولكن لا يبدو أنه يعمل بشكل صحيح عند تضمينه .NET 4. لقد قمت بتنزيل المصدر من CodeProject ، وحولت الحل إلى المشاريع إلى VS2010 ، وتحديث الإطار الهدف إلى 4.0. أثناء تبنيه ، ويتم تنفيذ العينة بشكل صحيح ، تُظهر التوقيت أن الوصول الديناميكي للخاصية مع HyperDescriptor هو أبطأ طريقة ممكنة للحصول على قيم الكائن/ضبط.

هذه المشكلة هي فقط عندما تقوم ببناء HyperDescriptor من المصدر باستخدام .NET 4. إذا كنت من مشروع .NET 4 الخاص بك ، يمكنك إضافة إشارة إلى HyperDescriptor المصممة باستخدام .NET 2 ، فهو يعمل بشكل جيد. هذا حل مقبول في الوقت الحالي ، ولكن هل سيكون هناك بعض المزايا المحتملة لاستخدام بناء .NET 4؟ أي شخص يريد أن يأخذ صدعًا في Hyperdscriptor ، انظر لماذا يكون بطيئًا جدًا مع بناء .NET 4؟

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

المحلول

لقد قمت بتنزيل الكود المصدري وقمت بإجراء الاختبار باستخدام .NET 4. هناك عدد مثير للإعجاب InvalidOperationException ألقيت واشتعلت ، مما تسبب في بطء.

اذهب إلى HyperTypeDescriptionProvider.BuildDescriptor واستبدل:

[ReflectionPermission(SecurityAction.Assert, Flags = ReflectionPermissionFlag.AllFlags)]

بواسطة:

[SecuritySafeCritical]
[ReflectionPermission(SecurityAction.Assert, Unrestricted = true)]

تم إهمال allflags ويؤدي فقط إلى تحذير ، ولكن التأكيد من طريقة شفافة أمنية ليست صالحة في .NET 4. انظر التغييرات الأمنية في إطار .NET 4 للمزيد من المعلومات.

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