2010-06-23 2 views
8

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

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

+0

Ох. Интересно. Посмотрите на это завтра, если не решите. –

ответ

13

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

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

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

по:

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

AllFlags устарела и вызывает только предупреждение, но утверждая из прозрачного способа защиты не действует в .NET 4 См. Security Changes in the .NET Framework 4 для получения дополнительной информации.

+1

Очень интересно! –

+0

Работала отлично, тайминги снова супер быстро. Благодаря! –