2012-12-18 54 views
0

我有一個程序加載一個DLL並實例化一個預定義的對象。該對象具有許多其名稱在XML文件中定義的屬性。我的程序需要在實例化對象中獲取/設置這些屬性。對象之間的高效數據傳輸 - C#

我正在尋找模式/方法來做同樣的事情。

我不能使用反射,因爲這個Get/Set方法在我的程序循環中被連續調用。使用反射非常昂貴。

做你們任何人有任何最佳實踐,你用這種情況?注意:如果需要,我可以更改從DLL動態加載的對象(我正在開發它)的結構,但我的程序不知道對象屬性的名稱(該DLL也是動態生成的,所以本質上,用戶指定對象中所需的成員,另一個程序生成代碼文件並將它們編譯到上面提到的DLL中。之後,我的程序加載這個新生成的DLL並啓動它的工作。因此,我可以改變DLL中對象的結構,但我不知道DLL對象中包含的屬性。)

+1

使用反射不一定是昂貴的 - 它在一些有關包括最快庫完成.NET Protobuffer實現。有很多漂亮的技巧可以使它比基本的實現快得多。 – 2012-12-18 08:04:38

+1

嘗試:http://automapper.org/ –

+0

@pst我正在尋找反射的替代品。我目前的解決方案是使用反射。我想要一個可以用任何語言實現的解決方案。我覺得使用反射將我的設計與.NET結合在一起。 –

回答

0

如果還不算太晚,我會建議採用以下方法。

設計你的外部程序,這樣,

  1. 它的結構,用戶輸入爲XML文件。
  2. 通過生成xsd.exe工具它隨.Net框架SDK
  3. 生成從XSD文件類XSD文件再次使用XSD.EXE

這樣你可以有你的主應用程序,反序列化純xml到您的外部程序生成的類。最後,它應該看起來像下面這樣,並且只需要很少的代碼來維護。

外部程序:XML數據 - > XSL模式 - > GeneratedClasses

主要用途:XML數據 - >反序列化實例

+0

我正在做類似的事情。問題不在實例生成中。我已經完成了這部分。由於之前我不知道對象中存在哪些屬性,因此我必須依賴Reflection來訪問對象的這些屬性。我想要一個替代方案。 –

+0

@RaghavendraKumar我的建議根本沒有提及反思。 –

+0

哦,好的。對不起這是我的錯。但我希望這一步每秒可以完成數百次。你解釋的方法是否足夠快?由於它似乎使用了大量的磁盤資源。 –