2010-06-23 12 views
8

Bir .NET 4 projesinde çalışıyorum ve HyperDescriptor'un sağladığı dinamik özellik erişiminden yararlanabileceğim, ancak .NET 4'te yerleşik olarak düzgün çalışmıyor gibi görünmüyor. CodeProject, çözümü bir projeyi VS2010'a dönüştürdü ve hedef çerçeveyi 4.0'a güncelledi. Örnek oluştururken ve örnek doğru yürütürken, zamanlama, HyperDescriptor ile dinamik özellik erişiminin, nesne değerlerini alması/ayarlamasının en yavaş olası yolu olduğunu gösterir.HyperDescriptor, .NET 4'te oluşturulduğunda çalışır mı?

Bu sorun yalnızca HyperDescriptor .NET 4. ile kaynak oluşturduğunuzda. NET 4 projenizden, .NET 2 ile oluşturulan HyperDescriptor'a bir başvuru eklersiniz, iyi çalışır. Bu şimdilik kabul edilebilir bir çözümdür, ancak .NET 4 yapısını kullanmanın bazı potansiyel avantajları olabilir mi? HyperDescriptor'da bir çatlak almak isteyen var mı, bir .NET 4 derlemesiyle neden bu kadar yavaş olduğunu görüyor musunuz?

+0

Ooh. İlginç. Yarın çözülmezse buna bakacağım. –

cevap

13

Kaynak kodu indirdim ve .NET 4. ile testi çalıştırdım. InvalidOperationException'un etkileyici bir sayısı var ve yakalanıp yavaşlıyor.

HyperTypeDescriptionProvider.BuildDescriptor gidin ve değiştirin:

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

tarafından:

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

AllFlags kaldırılmış ve sadece bir uyarı neden olur, ancak bir güvenlik şeffaf yönteminden iddia .NET 4'te geçerli değildir Daha fazla bilgi için bkz. Security Changes in the .NET Framework 4.

+1

Çok ilginç! –

+0

Mükemmel bir şekilde çalıştı, zamanlamalar tekrar süper hızlı. Teşekkürler! –