2011-05-04 17 views

Respuesta

3

Por lo que yo puedo decir, al menos para este caso concreto, nada.

Tanto método seek() y Posición propiedad requieren canSeek para ser verdad por lo que por lo que veo es hasta el implementador.

La búsqueda está realmente allí para permitir la búsqueda desde ubicaciones especificadas (SeekOrigins) a un desplazamiento (los ejemplos que figuran en MSDN son algo intrincados pero representativos de la finalidad: http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx).

posición es absoluta y, obviamente, no está pensado para la búsqueda.

El caso que acaba de mencionar es equivalente.

Personalmente, usaría .Position = 0 para moverme al comienzo de la secuencia, ya que me lee más limpio que "Busca usando el comienzo del archivo como origen y mueve este 0 desplazamiento de bytes".

3

En su ejemplo, no hay diferencia.

la diferencia real entre Stream.Position y Stream.Seek es que Position utiliza un desplazamiento absoluto mientras que Seek utiliza un desplazamiento en relación con el origen especificado por el segundo argumento.

13

stream.Seek(x, SeekOrigin.Begin); y stream.Position = x; ambos dan como resultado que la posición del flujo se establezca en x. La diferencia es que el setter Position descarta incondicionalmente cualquier buffer de lectura, mientras que el método Seek intenta retener la parte del buffer que sigue siendo relevante para la nueva posición.

Vas a tener que probar que uno es más rápido para su escenario, pero definitivamente hay una diferencia de rendimiento y tampoco lo es más rápido en todos los casos. Realmente me pregunto por qué esta diferencia no está documentada.

+1

Gracias, esta fue una importante diferencia importante de la que no tenía conocimiento. Me ayudó a arreglar un error haciendo pequeñas búsquedas hacia atrás que arrojaban datos incorrectos. Cambió a Posición en su lugar y se leyeron los datos. – tcarvin

Cuestiones relacionadas