2009-03-05 21 views
18

可能重複:
How costly is .NET reflection?反思真的很慢,我不應該使用它,當它是有道理的?

的「優雅」的解決方案我有一個problem是使用屬性類及其與其他屬性相關聯。問題是,要將其轉換爲另一個,我不得不使用反射。我正在考慮將其託管在雲端的服務器端應用程序。

我聽說過的「反思是緩慢的,不使用它,」怎麼慢很慢很多傳言? CPU密集程度如此之高,以至於我的CPU時間會倍增太多,以至於我決定在雲架構底部使用反射的決定付出代價。

回答

28

以防萬一你看不到原來的問題的更新:當你反映找出所有支持的類型一定的屬性,你有一個完美的機會來使用緩存。這意味着您不必在運行時多次使用反射。

要回答的一般問題,反思比原編制方法調用速度較慢,但​​它是多少,比訪問數據庫或文件系統快得多,而且幾乎所有的Web服務器做這些事情所有的時間。

+0

Genius(+4個字符) – 2009-03-05 21:05:05

8

可能你甚至不會注意到它。在考慮優化之前,請始終首先進行簡介。

15

它比文件系統訪問快許多倍。

它比整個網絡上的數據庫訪問快許多倍。

這比向瀏覽器發送HTTP響應要快許多許多倍。

4

我想知道同樣的事情;但事實證明,反思並不是那麼糟糕。我找不到資源(當我找到它們時,我會盡力列出它們),但我想我還記得,它的讀取速度可能是2倍到3倍慢。速度的50%或33%仍然很快。

另外,我引擎蓋下ASP.net WebForms和MVC做了一堆反射的,所以它是如何緩慢真的可以?

編輯

這裏是一個資源我記得讀:.Net Reflection and Performance

3

嗯,我嘗試,如果我能避免反光,但如果我要創建一個解決方案,並反映給了我一個優雅的方式解決手頭的問題,我會hapily使用反射。

但是,它必須被告知,我認爲反思不應該被用來做「搞鬼」。在這個時候,我也在研究一個解決方案,我使用自定義屬性來裝飾一些類,是的,我將不得不使用反射來知道一個類/屬性/是否已被我的自定義裝飾屬性。

我也認爲這是「多少你讓反射調用」的事? 如果可以,我嘗試緩存我的結果。 就像在我正在處理的解決方案中:在應用程序啓動時,我檢查特定程序集中的某些類型,這些類型是否用我的屬性進行了修飾,並且我將它們保存在字典中。

相關問題