Pregunta

Estoy trabajando en un proyecto .NET 4, y sería capaz de beneficiarse del acceso a la propiedad dinámica que HyperDescriptor ofrece, pero no parece estar funcionando correctamente cuando se construyó en .NET 4. he descargado la fuente de CodeProject, convierte la solución de un proyectos de VS2010, y se actualiza el marco de destino para 4.0. Mientras se construye, y se ejecuta la muestra correctamente, los tiempos muestran que el acceso propiedad dinámica con HyperDescriptor es el más lento forma posible de obtener / establecer valores de objeto.

Este problema sólo cuando se genera HyperDescriptor de la fuente con .NET 4. Si su proyecto de .NET 4, se agrega una referencia a HyperDescriptor construido con .NET 2, que funciona bien. Esta es una solución aceptable por ahora, pero podría haber alguna ventaja potencial de usar una acumulación .NET 4? Alguien quiere tomar una grieta en HyperDescriptor, ver por qué es tan lento con una estructura .NET 4?

¿Fue útil?

Solución

He descargado el código fuente y se pasó la prueba con .NET 4. Hay un número impresionante de InvalidOperationException lanzado y atrapado, causando la lentitud.

A HyperTypeDescriptionProvider.BuildDescriptor y reemplazar:

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

por:

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

AllFlags es obsoleto y sólo causa una advertencia, pero la afirmación de un método transparente de seguridad no es válida en .NET 4. Véase cambios de seguridad en la .NET Framework 4 para obtener más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top