2010-06-23 4 views
8

Ich arbeite an einem .NET 4 Projekt und wäre in der Lage, von der dynamischen Eigenschaft Zugriff zu profitieren, die HyperDescriptor bietet, aber es scheint nicht ordnungsgemäß zu funktionieren, wenn in .NET gebaut 4. Ich habe die Quelle heruntergeladen CodeProject, konvertierte die Projektlösung in VS2010 und aktualisierte das Zielframework auf 4.0. Während das Build erstellt wird und das Beispiel ordnungsgemäß ausgeführt wird, zeigen die Timings, dass der Zugriff auf dynamische Eigenschaften mit HyperDescriptor langsamste mögliche Möglichkeit zum Abrufen/Festlegen von Objektwerten ist.Funktioniert HyperDescriptor in .NET 4?

Dieses Problem tritt nur auf, wenn Sie HyperDescriptor aus der Quelle mit .NET 4 erstellen. Wenn Sie in Ihrem .NET 4-Projekt einen Verweis auf mit .NET 2 erstellte HyperDescriptor hinzufügen, funktioniert es einwandfrei. Dies ist eine akzeptable Lösung für den Moment, aber wäre da ein potentieller Vorteil für die Verwendung von .NET 4 Build? Wer möchte bei HyperDescriptor einen Riss machen, sehen Sie, warum es mit einem .NET 4-Build so langsam ist?

+0

Ooh. Interessant. Schaut morgen nach, wenn es nicht gelöst wird. –

Antwort

13

Ich habe den Quellcode heruntergeladen und führte den Test mit .NET 4. Es gibt eine beeindruckende Anzahl von InvalidOperationException geworfen und gefangen, was die Langsamkeit verursacht.

Zum HyperTypeDescriptionProvider.BuildDescriptor und ersetzen:

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

von:

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

AllFlags ist veraltet und verursacht nur eine Warnung, aber von einem Sicherheits transparenten Verfahren zu behaupten ist nicht gültig in .NET 4 Weitere Informationen finden Sie unter Security Changes in the .NET Framework 4.

+1

Sehr interessant! –

+0

Perfekt gearbeitet, Timings sind wieder super schnell. Vielen Dank! –