2010-08-04 1 views
0

문자열 키가 있지만 값의 일종의 개체가있는 사전에 대한 Bytes Array에 대한 serializer를 작성했습니다.vb.net - 함수에 제네릭 형식 및 대리자를 구현할 경우 성능에 영향이 있습니다.

함수에 제네릭 형식을 구현 한 적이 없거나 이전에 대리자를 사용한 적이 없기 때문에 특정 형식의 사전에 대한 serialization 함수를 작성하는 것보다 훨씬 느린 것에 대해 조금 염려합니다 (Dictionary (Of String, MyClass) 예).

제네릭 형식 또는 대리인을 사용하기 때문에이 코드가 상당히 느려야합니까? 여기

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) 

그것은 작동하고, 내가 루프를 할 수 있었던 더 정적 사전 시리얼 라이저와 비교,하지만 사용하기 시작할 때 내가 더 걱정 해요 이것은 다른 String/Object 사전 조합을 많이 사용하기 때문에 정적 사전 serializer를 많이 작성하는 데 시간이 오래 걸릴 것입니다. (처음에 피할 수 있기를 바랍니다)

편집 : 단순화 인트로 텍스트

답변

2

아니요, 제네릭은 코드 을 더 빠르게 만들도록 특별히 설계되었습니다.. 하드 코딩 유형만큼이나 빠릅니다. 복싱 값 유형을 피할 수 있고 캐스트 할 필요가 없기 때문에 Object를 사용하는 것보다 훨씬 빠릅니다.

대리자 호출이 직접 메서드 호출보다 느립니다. 그러나 그것은 여전히 ​​매우 빠르다. 그 차이를 알기 위해 10 억 배로 전화해야합니다.

BinaryFormatter 클래스를 알고 계십니까? 그것은 이미 이것을합니다.

+0

BinaryFormatter 클래스는보다 느린 일반 스타일의 직렬화를 사용한다는 것을 알고 있습니다. 답변 해주셔서 감사합니다! –

관련 문제