[問題] 請教有關Reflection的關念

看板C_Sharp作者 (風車 鬱金香)時間17年前 (2008/07/27 16:03), 編輯推噓4(404)
留言8則, 4人參與, 最新討論串1/1
我現在有一個滿大的class階層,大約有一百八十幾個, 這結構是對映到一個xml的規範, 當我在parse xml文件時,會用.net把xml文件轉成對映到這class階層的結構, 這樣方便我以物件階層的方式來處理xml。 我有個需求,我需要知道class A裡面是否有class B,但A裡面的Fields也是物件, 這樣會有許多層,於是我就想到用遞迴來寫,可是一百八十幾個class, 我在寫遞迴就要寫一百八十幾個switch 的 case, 我才寫幾個case就累了, 於是就想用Reflection來寫,Reflection可以用GetFields,剛剛試了一下, 應該可以使用。 我想問的是這兩種方式哪個比較好?因為我想到用Reflection不就是run time時才決定, 那會不會效能較差,不過遞迴雖然是有編譯過,但以前老師總是說遞迴會一直做 function call,效能也是會比較差。不過現在在c#是不是比較不在意function call的 cost?總覺得物件導向在設計時都會把function定清楚,做的事情相當單純,function 老是call來call去的。 請問一下各位,要是你們會用遞迴來寫,還是用Reflection來寫?哪一種比較好? 如果我上面說的觀念有錯,也麻煩糾正我一下。 謝謝大家。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.182.5

07/27 16:33, , 1F
可以看.NET Serialization,裡面應該有XML的方式
07/27 16:33, 1F

07/27 16:33, , 2F
若是二選一的,我會用reflection
07/27 16:33, 2F

07/29 01:12, , 3F
function call cost指的是跳躍編譯成本,跟inline相比
07/29 01:12, 3F

07/29 01:12, , 4F
遞迴最大的成本不是function call,而是區域變數的保留成本
07/29 01:12, 4F

07/29 01:20, , 5F
找一下 XmlSerialization 吧 .. 好東西耶! [效能不詳 XD]
07/29 01:20, 5F

07/31 13:52, , 6F
我也有類似專案,我是用reflection的,彈性與效能有時不能
07/31 13:52, 6F

07/31 13:52, , 7F
兩全其美
07/31 13:52, 7F

07/31 13:53, , 8F
如果專案完成真的有效能瓶頸,嘗試自己加入caching的功能
07/31 13:53, 8F
文章代碼(AID): #18Z2libM (C_Sharp)