HyperDescriptor在.NET 4中构建时是否有效?

Sam*_*ham 8 .net c# dynamic clr4.0

我正在研究.NET 4项目,并且能够从HyperDescriptor提供的动态属性访问中受益,但是当在.NET 4中构建时,它似乎无法正常工作.我从CodeProject下载了源代码,将解决方案的项目转换为VS2010,并将目标框架更新为4.0.在构建并且示例正确执行时,时序显示使用HyperDescriptor进行动态属性访问是获取/设置对象值的最慢方式.

只有在使用.NET 4从源代码构建HyperDescriptor时才会出现此问题.如果从.NET 4项目中添加对使用.NET 2构建的HyperDescriptor的引用,则可以正常工作.这是目前可接受的解决方案,但是使用.NET 4构建会有一些潜在的优势吗?任何人都想在HyperDescriptor上破解,看看为什么.NET 4版本的速度如此之慢?

Jul*_*ain 13

我下载了源代码并使用.NET 4运行测试.InvalidOperationException抛出和捕获的数量令人印象深刻,导致速度缓慢.

转到HyperTypeDescriptionProvider.BuildDescriptor并替换:

[ReflectionPermission(SecurityAction.Assert, Flags = ReflectionPermissionFlag.AllFlags)]
Run Code Online (Sandbox Code Playgroud)

通过:

[SecuritySafeCritical]
[ReflectionPermission(SecurityAction.Assert, Unrestricted = true)]
Run Code Online (Sandbox Code Playgroud)

不推荐使用AllFlags并且仅引发警告,但是从安全透明方法断言在.NET 4中无效.有关详细信息,请参阅.NET Framework 4中的安全更改.