Quando você precisa redefinir um fluxo para o início (por exemplo MemoryStream
), é uma prática recomendada usar
stream.Seek(0, SeekOrigin.Begin);
ou
stream.Position = 0;
Eu vi os dois funcionar bem, mas me perguntei se um estava mais correto que o outro?
stream.Position = 0;
mas tenho que concordar com @jgauffin, basta escolher o mais legível, ambas as soluções funcionam bem.Respostas:
Use Posição ao definir uma posição absoluta e Buscar ao definir uma posição relativa. Ambos são fornecidos por conveniência, para que você possa escolher um que se adapte ao estilo e à legibilidade do seu código. A Posição de acesso exige que o fluxo seja procurável para que eles sejam intercambiáveis com segurança.
fonte
stream.Position += 10;
parece-me bastante legível.Você pode procurar no código fonte os dois métodos para descobrir:
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs.320
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs.482
O custo é quase idêntico (3 ifs e algumas aritméticas). No entanto, isso só é válido para saltar para compensações absolutas como
Position = 0
e não para compensações relativasPosition += 0
, e nesse caso a Busca parece um pouco melhor.No entanto, você deve ter em mente que estamos falando sobre o desempenho de um punhado de atinméticos inteiros e verificações ifs, isso nem sequer é mensurável com precisão com métodos de benchmarking. Como outros já apontados, não há diferença significativa / detectável.
fonte