我正在尋找一種更有效的方法來從已知特定類型派生的裝配中查找類型。基本上,我在我的應用程序中的插件架構,和時間最長的,我們一直在做這樣的:如何在Assembly中有效地定位特定類型*?
For Each t As Type In assem.GetTypes()
If t.BaseType Is pluginType Then
'Do Stuff here'
End If
Next
一些插件有大量的類型,我們已經開始看到這種採取幾秒鐘。有沒有什麼辦法可以請求所有類型爲「pluginType」的BaseType?編輯: 我過分簡化了我的代碼示例。我在我的實際代碼中使用了.GetExportedTypes()。但是,我有很多類都被標記爲Public,所以它沒有太多幫助。除了實際的插件類以外,我梳理了項目並標記了所有「朋友」,並且它仍然花費幾乎相同的時間來檢查程序集。我從1.3秒(也就是不到10%)中減去了100毫秒。這只是我必須處理的最短時間嗎?我也嘗試了Assembly Attribute的建議,但它仍然沒有產生太大的差別(也許再次是100ms)。剩下的時間是我必須支付動態加載程序集的開銷嗎?
不是真正的問題答案,但也許看看MEF:http://www.codeplex。com/MEF – herskinduk 2009-02-11 14:28:41
真實的測試條件要複雜多少?你使用`AndAlso`和`OrElse`還是`And`和`Or`?我問,因爲在我最慢的機器上,使用DotLisp解釋器,枚舉14807個類型需要0.322秒,使用`BaseType = Component`獲取公共類型需要0.458秒。哦,在這臺較慢的機器上檢查編譯的LinqPad版本的查詢後,我發現問題:在Type類型對象被緩存之前,甚至在後臺構建之前,它的速度要慢得多:10961`Types`在10.206秒內枚舉!緊接着,找到`Components`只有0.03323秒。 – 2014-02-21 10:04:27