Tôi đang tìm một cách hiệu quả hơn để tìm một loại trong một hội mà xuất phát từ một loại cụ thể đã biết. Về cơ bản, tôi có một kiến trúc plugin trong ứng dụng của tôi, và cho thời gian dài nhất, chúng tôi đã làm điều này:Làm cách nào tôi có thể định vị một loại cụ thể trong một Assembly * một cách hiệu quả *?
For Each t As Type In assem.GetTypes()
If t.BaseType Is pluginType Then
'Do Stuff here'
End If
Next
Một số plugin có một số lượng lớn các loại và chúng tôi đang bắt đầu thấy điều này mất một vài giây. Có cách nào tôi chỉ có thể yêu cầu tất cả các loại có BaseType của "pluginType"?
EDIT: Tôi đã đơn giản hóa mẫu mã của mình. Tôi đã sử dụng .GetExportedTypes() trong mã thực tế của tôi. Tuy nhiên, tôi rất nhiều lớp học được đánh dấu là Công khai, vì vậy nó không giúp quá nhiều. Tôi đã chải qua các dự án và đánh dấu tất cả mọi thứ "Bạn bè" ngoại trừ lớp plugin thực tế, và nó vẫn mất gần như cùng một khoảng thời gian để kiểm tra các hội đồng. Tôi cắt giảm 100 ms trong 1,3 giây (nhỏ hơn 10%). Đây có phải là thời gian tối thiểu tôi phải đối phó không? Tôi cũng đã thử đề nghị thuộc tính hội và nó vẫn không mang lại nhiều sự khác biệt (có thể 100ms một lần nữa). Là phần còn lại của thời gian tôi phải trả tiền để tải linh hoạt?
Không thực sự là câu trả lời cho câu hỏi, nhưng có lẽ có một cái nhìn tại MEF: http: //www.codeplex.com/MEF – herskinduk
Điều kiện thử nghiệm thực tế của bạn phức tạp hơn bao nhiêu? Bạn đang sử dụng 'AndAlso' và' OrElse' hay chỉ là 'And' và' Or'? Tôi hỏi vì trên máy chậm nhất của tôi, sử dụng trình thông dịch DotLisp, liệt kê 14807 loại mất 0.322 giây và nhận các loại công khai với 'BaseType = Component' mất 0,458 giây. Oh, khi kiểm tra phiên bản LinqPad đã biên dịch của truy vấn này trên máy chậm hơn này, tôi thấy vấn đề: trước khi các đối tượng 'Type' được lưu trữ, hoặc thậm chí được xây dựng đằng sau hậu trường, nó chậm hơn nhiều: 10961' Types' được liệt kê trong 10,206 giây! Ngay sau đó, chỉ có 0,03323 giây để tìm 'Thành phần'. –