2010-08-04 64 views
0

我爲包含字符串鍵的字典,但是具有某種類型的對象作爲其值,編寫了一個序列化程序(對於字節數組)。我從來沒有在一個函數中實現泛型或之前使用委託,所以我有點擔心這比編寫特定類型的字典的序列化函數慢得多(Dictionary(Of String, MyClass)爲例)。vb.net - 在函數中實現通用類型和委託的性能影響

由於使用泛型類型或委託,此代碼是否會顯着變慢?

Public Delegate Function Serializer(Of T)(ByRef Obj As T) As Byte() 

Function SerializeDictionary_String_Object(Of T)(ByRef D As Dictionary(Of String, T), ByVal S As Serializer(Of T)) As Byte() 

    Dim OBJ As T 

    For Each X In D 
     OBJ = X.Value 
     Exit For 
    Next 

    Return S(OBJ) 

End Function 

下面是一個使用這樣的代碼:

SerializeDictionary_String_Object(Of MyClass)(MyDictionary, AddressOf MyClass.Serialize) 

它的工作原理,但我沒能循環,並把它比作一個更靜態的詞典序列化,但我更關心的是,當我開始使用這對於很多不同的字符串/對象字典組合而言,編寫一堆靜態字典串行器需要很長時間(這正是我希望首先避免的)

edit:simplified介紹文本

回答

2

不,仿製藥是專門設計用於使代碼更快。就像硬編碼類型一樣快。因爲您可以避免裝箱值類型並且不必投射,所以比使用Object的替代方法更快。

委託調用比直接方法調用要慢。但它仍然非常非常快。你必須撥通十億次才能注意到這種差異。

您是否知道BinaryFormatter類?它已經這樣做了。

+0

我的理解是BinaryFormatter類使用較慢的通用樣式的序列化。感謝你的回答! – 2010-08-04 14:20:49