Questo codice richiede circa 8 secondi con un flusso contenente circa 65K proveniente da un blob in un databasePerché la copia di un torrente e poi deserializzazione utilizzando un BinaryFormatter più veloce di appena deserializzazione
private string[] GetArray(Stream stream)
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
object result = binaryFormatter.Deserialize(stream);
return (string[])result;
}
Questo codice richiede pochi millisecondi :
private string[] GetArray(Stream stream)
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
MemoryStream memoryStream = new MemoryStream();
Copy(stream, memoryStream);
memoryStream.Position = 0;
object result = binaryFormatter.Deserialize(memoryStream);
return (string[])result;
}
Perché?
Che tipo di flusso passi? –
È lo stream che ottengo da oracleReader.GetOracleBlob (col) o sqlDataReader.GetSqlBytes (col) .Stream. Si comporta allo stesso modo. L'implementazione di Oracle è leggermente più veloce rispetto a SQL Server. –
Utilizzare un profiler. Sospetto cattiva misurazione. Forse il primo carica la cache così il secondo è veloce. Cambia l'ordine. Inoltre, estrai il database dall'equazione. – usr