Stream.Seek (0, SeekOrigin.Begin) o Position = 0


175

Cuando necesita restablecer una transmisión al comienzo (por ejemplo MemoryStream), es mejor usar

stream.Seek(0, SeekOrigin.Begin);

o

stream.Position = 0;

He visto que ambos funcionan bien, pero me preguntaba si uno era más correcto que el otro.


1
Si se trata de devolver el contenido del flujo de memoria, ToArray funciona independientemente de su posición
James Kyburz,

3
Respuesta: La más legible.
jgauffin

77
Personalmente prefiero stream.Position = 0;pero tengo que estar de acuerdo con @jgauffin, solo elija la más legible, ambas soluciones funcionan bien.
lenniep

Respuestas:


161

Use Posición cuando establezca una posición absoluta y Busque cuando establezca una posición relativa. Ambos se proporcionan por conveniencia para que pueda elegir uno que se ajuste al estilo y la legibilidad de su código. La posición de acceso requiere que la transmisión sea buscable para que sean intercambiables de forma segura.


55
Utilizo la propiedad incluso para posiciones relativas: me stream.Position += 10;parece bastante legible.
Jon Skeet

66
¿Hay una diferencia de velocidad entre usar SeekOrigin.Begin y SeekOrigin.Current?
gonzobrains

66
@gonzobrains "Valor de retorno: la nueva posición dentro de la secuencia, calculada combinando el punto de referencia inicial y el desplazamiento". . Por lo tanto, la combinación cuesta un poco más que simplemente establecer la posición directamente. Prácticamente no significa nada más que picar. )))
user808128

1
@ user808128 Citar la documentación, al menos ese tipo de documentación, no es evidencia de rendimiento. Debe consultar los códigos fuente para eso.
ArekBulski

8

Puede consultar el código fuente de ambos métodos para averiguarlo:

El costo es casi idéntico (3 si y algo de aritmética). Sin embargo, esto solo es cierto para saltar a compensaciones absolutas Position = 0y no a compensaciones relativas Position += 0, en cuyo caso Seek parece un poco mejor.

Sin embargo, debe tener en cuenta que estamos hablando sobre el rendimiento de un puñado de atirthmetics enteros y verificaciones ifs, es decir, que ni siquiera se puede medir con precisión con los métodos de evaluación comparativa. Como otros ya señalaron, no existe una diferencia significativa / detectable.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.