2010-06-23 39 views
8

Tôi đang làm việc trên dự án .NET 4 và có thể hưởng lợi từ quyền truy cập thuộc tính động mà HyperDescriptor cung cấp, nhưng dường như không hoạt động đúng khi được xây dựng trong .NET 4. Tôi đã tải xuống nguồn từ CodeProject, đã chuyển đổi giải pháp thành một dự án thành VS2010 và cập nhật khung mục tiêu thành 4.0. Trong khi nó được xây dựng và mẫu thực thi chính xác, thời gian cho thấy rằng quyền truy cập thuộc tính động với HyperDescriptor là chậm nhất cách có thể nhận/thiết lập các giá trị đối tượng.HyperDescriptor có hoạt động khi được xây dựng trong .NET 4 không?

Vấn đề này chỉ khi bạn xây dựng HyperDescriptor từ nguồn với .NET 4. Nếu từ dự án .NET 4 của bạn, bạn thêm tham chiếu tới HyperDescriptor được xây dựng với .NET 2, nó hoạt động tốt. Đây là một giải pháp có thể chấp nhận được ngay bây giờ, nhưng sẽ có một số lợi thế tiềm năng khi sử dụng .NET 4 build? Bất cứ ai muốn có một crack tại HyperDescriptor, xem tại sao nó quá chậm với một.NET 4 xây dựng?

+0

Ooh. Hấp dẫn. Sẽ xem xét vào ngày mai nếu không được giải quyết. –

Trả lời

13

Tôi đã tải xuống mã nguồn và chạy thử nghiệm với .NET 4. Có một số ấn tượng là InvalidOperationException bị ném và bị bắt, gây chậm đi.

Đến HyperTypeDescriptionProvider.BuildDescriptor và thay thế:

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

bởi:

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

AllFlags bị phản đối và chỉ gây ra một cảnh báo, nhưng khẳng định từ một phương pháp an ninh trong suốt là không hợp lệ trong .NET 4 Xem Security Changes in the .NET Framework 4 để biết thêm thông tin.

+1

Rất thú vị! –

+0

Làm việc hoàn hảo, thời gian lại siêu nhanh. Cảm ơn! –

Các vấn đề liên quan