Pergunta

Muitas vezes eu correr para o problema que eu tenho um fluxo completo de dados e quer escrever tudo isso em um outro córrego.

Todos os exemplos de códigos aí utilizar um tampão na forma de um byte-matriz.

Existe uma maneira mais elegante para isso?

Se não, qual é o tamanho ideal do buffer. Quais os fatores que compõem esse valor?

Foi útil?

Solução

Em relação ao tamanho do buffer ideal:

"Ao usar o método de leitura, é mais eficiente usar um buffer que é do mesmo tamanho que o buffer interno do fluxo, onde o buffer interno é definido para o seu tamanho do bloco desejado, e sempre ler menos do que o bloquear tamanho. Se o tamanho da memória intermédia interna foi especificada quando o fluxo foi construído, o seu tamanho padrão é de 4 kilobytes (4096 bytes) ".

Qualquer processo de leitura de corrente vai usar Leia (char buffer [], int índice, contagem), que é o método desta citação refere-se a.

http://msdn.microsoft.com/en-us/library/ 9kstw824.aspx (em "Observações").

Outras dicas

Em .NET 4.0 finalmente chegamos a método Stream.CopyTo ! Yay!

Eu não tenho certeza se você pode diretamente tubo de um fluxo para outro em .NET, mas aqui está um método para fazê-lo com um buffer de bytes intermediário. O tamanho da memória intermédia é arbitrária. O tamanho mais eficiente dependerá principalmente da quantidade de dados que você está transferindo.

static void CopyStream(Stream input, Stream output){
    byte[] buffer = new byte[0x1000];
    int read;
    while ((read = input.Read(buffer, 0, buffer.Length)) > 0) 
        output.Write(buffer, 0, read);
}

BufferedStream.CopyTo (Stream)

Ler dados em FileStream em um fluxo genérico

provavelmente terá algumas direções para entrar

Eu não estou ciente de uma maneira mais elegante, do que usar um tampão.

Mas o tamanho de um buffer pode fazer a diferença. Lembre-se das questões sobre a cópia de arquivo do Vista? É da razão era (basicamente) mudando o tamanho da memória intermédia. As mudanças são explicadas em este blogpost. Você pode aprender os principais fatores desse post. No entanto, isto só se aplica para cópia de arquivo. Em aplicações, provavelmente você faz um monte de cópias de memória, por isso, nesse caso, a 4KB poderia ser o melhor tamanho do buffer, como recomendado pela documentação do .NET .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top