Lorsque vous devez réinitialiser un flux au début (par exemple MemoryStream
), est-il recommandé d'utiliser
stream.Seek(0, SeekOrigin.Begin);
ou
stream.Position = 0;
J'ai vu les deux fonctionner correctement, mais je me suis demandé si l'un était plus correct que l'autre?
stream.Position = 0;
Personnellement, je préfère mais je suis d'accord avec @jgauffin, choisissez simplement la plus lisible, les deux solutions fonctionnent bien.Réponses:
Utilisez Position lors de la définition d'une position absolue et Recherche lors de la définition d'une position relative. Les deux sont fournis pour des raisons de commodité afin que vous puissiez en choisir un qui correspond au style et à la lisibilité de votre code. Pour accéder à la position, le flux doit être recherché afin qu'ils soient interchangeables en toute sécurité.
la source
stream.Position += 10;
me semble assez lisible.Vous pouvez consulter le code source des deux méthodes pour le découvrir:
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,320
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,482
Le coût est presque identique (3 ifs et quelques arithmétiques). Cependant, cela n'est vrai que pour passer à des décalages absolus comme
Position = 0
et non à des décalages relatifs commePosition += 0
, auquel cas Seek semble légèrement meilleur.Cependant, vous devez garder à l'esprit que nous parlons de la performance d'une poignée de produits cosmétiques entiers et de vérifications ifs, qui ne sont même pas mesurables avec précision avec des méthodes d'analyse comparative. Comme d'autres l'ont déjà souligné, il n'y a pas de différence significative / détectable.
la source