Работает ли HyperDescriptor при сборке в .NET 4? - PullRequest
8 голосов
/ 24 июня 2010

Я работаю над проектом .NET 4 и смогу воспользоваться динамическим доступом к свойствам, предоставляемым HyperDescriptor , но он не работает должным образом при сборке в .NET 4. Я загрузил исходный код из CodeProject, преобразовал проект решения в VS2010 и обновил целевой фреймворк до 4.0. Несмотря на то, что он создается и пример выполняется правильно, время показывает, что динамический доступ к свойству с помощью HyperDescriptor является самым медленным возможным способом получения / установки значений объекта.

Эта проблема возникает только при сборке HyperDescriptor из источника с помощью .NET 4. Если из вашего проекта .NET 4 вы добавляете ссылку на HyperDescriptor, созданный с помощью .NET 2, он работает нормально. Пока это приемлемое решение, но будет ли какое-то потенциальное преимущество при использовании сборки .NET 4? Кто-нибудь хочет попробовать HyperDescriptor, посмотрите, почему он так медлителен в сборке .NET 4?

1 Ответ

13 голосов
/ 24 июня 2010

Я скачал исходный код и запустил тест с .NET 4. Там впечатляющее количество InvalidOperationException выброшено и поймано, вызывая медлительность.

Перейти к HyperTypeDescriptionProvider.BuildDescriptor и заменить:

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

по:

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

AllFlags устарела и вызывает только предупреждение, но утверждение из прозрачного метода безопасности недопустимо в .NET 4. Дополнительные сведения см. В Изменения безопасности в .NET Framework 4 .

...