web-dev-qa-db-fra.com

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

Lorsque vous avez besoin de réinitialiser un flux au début (par exemple, MemoryStream), est-il préférable d'utiliser

stream.Seek(0, SeekOrigin.Begin);

ou

stream.Position = 0;

J'ai vu les deux fonctionner correctement, mais je me demandais si l'un était plus correct que l'autre?

160
ConfusedNoob

Utilisez Position pour définir une position absolue et Rechercher lorsque vous définissez une position relative. Les deux sont fournis pour plus de commodité afin que vous puissiez choisir celui qui correspond au style et à la lisibilité de votre code. Pour accéder à la position, le flux doit être recherché afin de pouvoir être interchangé en toute sécurité.

142
gordy

Vous pouvez consulter le code source des deux méthodes pour savoir:

Le coût est presque identique (3 ifs et quelques arithmétiques). Cependant, cela n’est vrai que pour sauter à des décalages absolus comme Position = 0 et non pas des compensations relatives comme Position += 0, auquel cas Seek semble légèrement mieux.

Cependant, vous devez garder à l’esprit que nous parlons de la performance d’une poignée d’at67 et de contrôles ifs, qui ne sont même pas mesurables avec précision avec des méthodes de benchmarking. Comme d'autres l'ont déjà souligné, il n'y a pas de différence significative/détectable.

5
ArekBulski