Когда вам нужно сбросить поток в начало (например MemoryStream
), лучше всего использовать
stream.Seek(0, SeekOrigin.Begin);
или
stream.Position = 0;
Я видел, как оба работают хорошо, но задавался вопросом, был ли один более правильным, чем другой?
stream.Position = 0;
но я должен согласиться с @jgauffin, просто выберите наиболее читаемый, оба решения работают нормально.Ответы:
Используйте Положение при настройке абсолютной позиции и Ищите при настройке относительной позиции. И то, и другое предусмотрено для удобства, поэтому вы можете выбрать тот, который соответствует стилю и удобочитаемости вашего кода. Доступ к Позиции требует, чтобы поток был доступен для поиска, поэтому они могут быть взаимозаменяемыми.
источник
stream.Position += 10;
мне это кажется довольно читабельным.Вы можете посмотреть исходный код обоих методов, чтобы узнать:
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,320
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,482
Стоимость почти одинакова (3 ifs и немного арифметики). Однако это справедливо только для перехода к абсолютным смещениям,
Position = 0
а не к относительным смещениямPosition += 0
, в этом случае Seek кажется немного лучше.Однако вы должны иметь в виду, что мы говорим о выполнении нескольких целочисленных атертметик и проверок ifs, которые даже нельзя точно измерить с помощью методов бенчмаркинга. Как и другие уже отмеченные, нет никаких существенных / обнаружимых различий.
источник