2010-06-23 11 views
8

Sto lavorando a un progetto .NET 4 e sarei in grado di beneficiare dell'accesso alle proprietà dinamiche fornito da HyperDescriptor, ma non sembra funzionare correttamente quando è integrato in .NET 4. Ho scaricato l'origine da CodeProject, convertito la soluzione e i progetti in VS2010 e aggiornato il framework di destinazione a 4.0. Durante la creazione e l'esecuzione corretta dell'esempio, i tempi mostrano che l'accesso alle proprietà dinamiche con HyperDescriptor è il modo più lento possibile di per ottenere/impostare i valori degli oggetti.Funziona HyperDescriptor quando è incorporato in .NET 4?

Questo problema si verifica solo quando si crea HyperDescriptor dal sorgente con .NET 4. Se dal progetto .NET 4 si aggiunge un riferimento a HyperDescriptor creato con .NET 2, funziona correttamente. Questa è una soluzione accettabile per ora, ma ci sarebbe qualche vantaggio potenziale nell'usare una build .NET 4? Qualcuno vuole prendere una crepa su HyperDescriptor, capire perché è così lento con una build di .NET 4?

+0

Ooh. Interessante. Lo guarderò domani se non sarà risolto. –

risposta

13

Ho scaricato il codice sorgente e ho eseguito il test con .NET 4. C'è un numero impressionante di InvalidOperationException generato e bloccato, che causa la lentezza.

Vai a HyperTypeDescriptionProvider.BuildDescriptor e sostituire:

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

da:

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

AllFlags è deprecato e provoca solo un avvertimento, ma affermare da un metodo trasparente di protezione non è valido per .NET 4 Vedere Security Changes in the .NET Framework 4 per ulteriori informazioni.

+1

Molto interessante! –

+0

Funzionato perfettamente, i tempi sono di nuovo super veloci. Grazie! –

Problemi correlati