作者Jnaive (風車 鬱金香)
看板C_Sharp
標題[問題] 請教有關Reflection的關念
時間Sun Jul 27 16:03:55 2008
我現在有一個滿大的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
1F:推 marukocc:可以看.NET Serialization,裡面應該有XML的方式 07/27 16:33
2F:→ marukocc:若是二選一的,我會用reflection 07/27 16:33
3F:推 tomex:function call cost指的是跳躍編譯成本,跟inline相比 07/29 01:12
4F:推 tomex:遞迴最大的成本不是function call,而是區域變數的保留成本 07/29 01:12
5F:推 KENyroj:找一下 XmlSerialization 吧 .. 好東西耶! [效能不詳 XD] 07/29 01:20
6F:→ petrushka:我也有類似專案,我是用reflection的,彈性與效能有時不能 07/31 13:52
7F:→ petrushka:兩全其美 07/31 13:52
8F:→ petrushka:如果專案完成真的有效能瓶頸,嘗試自己加入caching的功能 07/31 13:53