Поток.Seek (0, SeekOrigin.Begin) или позиция = 0
когда вам нужно сбросить поток в начале (например,MemoryStream
) Это лучшая практика, чтобы использовать
stream.Seek(0, SeekOrigin.Begin);
или
stream.Position = 0;
Я видел, как оба работают нормально, но задавался вопросом, был ли один более правильным, чем другой?
2 ответов
используйте положение при установке абсолютного положения и ищите при установке относительного положения. Как для удобства, так что вы можете выбрать тот, который соответствует стилю и читабельности кода. Доступ к положению требует, чтобы поток был доступным, поэтому они безопасно взаимозаменяемы.
вы можете посмотреть исходный код для обоих методов, чтобы узнать:
- свойство позиции
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
в этом случае искать, кажется, немного лучше.
однако вы должны иметь в виду, что мы говорим о производительности нескольких целочисленных atirthmetics и IFS-проверок, это даже не точно измеримо с помощью методов бенчмаркинга. Как уже указывали другие, существенной/обнаруживаемой разницы нет.