Warum wird ein Stream kopiert und dann mit einem BinaryFormatter deserialisiert, anstatt nur zu deserialisieren?

9

Dieser Code dauert etwa 8 Sekunden mit einem Stream, der etwa 65 KB enthält und aus einem Blob in einer Datenbank stammt.

%Vor%

Dieser Code benötigt einige Millisekunden:

%Vor%

Warum?

    
Lars Peder Amlie 09.01.2013, 09:32
quelle

1 Antwort

5

Sie sagen also, das Problem verschwindet, wenn die Datenbank aus der Gleichung entfernt wird. Hier ist meine Theorie:

BinaryFormatter liest in kleinen Schritten aus dem Stream. Es hat so wenig wie möglich zu lesen, so dass es nicht versehentlich ein paar Bytes nach dem serialisierten Objekt verschluckt. Das heißt, es gibt Tonnen von Lesebefehlen aus (ich habe dies mit Reflector verifiziert).

Wahrscheinlich verursacht jedes Lesen des Blob-Streams einen Netzwerk-Roundtrip (oder einen anderen großen Overhead). Das gibt dir Millionen von Roundtrips, wenn du BinaryFormatter sofort verwendest.

Das erste Puffern bewirkt, dass das Netzwerk effizienter genutzt wird, da die Lesepuffergröße viel größer ist.

    
usr 09.01.2013, 13:23
quelle