反射是乙個相當強大的機制,它允許我們在執行時構建並使用乙個在編譯時還不了解的型別及其成員。但它也有兩個缺點。
使用反射呼叫乙個成員時,也會對效能產生影響。用反射呼叫乙個方法時,首先要將實參打包成乙個陣列,在內部,反射將這個陣列解包到執行緒棧上。此外,在呼叫方法前,clr要檢查實參的資料型別。最後,clr還要保證呼叫者擁有正確的安全許可權來訪問呼叫的成員。
基於上面的原因,最好避免利用反射來訪問字段或者呼叫方法/屬性。如果需要在執行時動態構造例項,可以使用下面的兩種技術。
關於介面和基類的選擇,一般情況應優先選用介面。不過,在需要版本控制的情形中,基類會更加適合,隨時向基類中新增成員,派生類會直接繼承它,不用重新編譯。而介面中新增乙個成員後,所有實現該介面的型別都必須修改並重新編譯。另外要注意一點,強烈建議基類或是介面型別在自己的程式集中定義,這有助於緩解版本控制問題。(其實,個人理解這樣做的原因在於更符合「依賴倒置」原則,使用介面的程式集才是需求方)。
反射的效能
今天在mvp站點上看到有人說反射的效能很差,要避免使用,就寫了乙個簡單的例子測試了一下 測試類如下 namespace reflectiontest.test public void test1 private double a public double geta 首先我們對於物件的構造進行測試 ...
反射的效能
反射是相當強大的乙個機制,它允許在執行時發現並使用編譯時還補了解的型別或成員。但是,它有下面兩個缺點。1,反射會造成編譯時無法保證型別型別安全性。由於反射要嚴重依賴字串,所以會喪失編譯時的型別安全性。2,反射速度慢。使用反射時,型別或成員的名稱在編譯時未知 要用字串名稱標識每個型別及其成員,以便在執...
C 反射效能測試
1.反射序列化與動態編譯序列化。比較結果 test started assembly pixysoft.framework.configurations.dll begin createobjectusingreflection begin createobjectusingreflection 0...