Поток.Seek (0, SeekOrigin.Begin) или позиция = 0

когда вам нужно сбросить поток в начале (например,MemoryStream) Это лучшая практика, чтобы использовать

stream.Seek(0, SeekOrigin.Begin);

или

stream.Position = 0;

Я видел, как оба работают нормально, но задавался вопросом, был ли один более правильным, чем другой?

2 ответов


используйте положение при установке абсолютного положения и ищите при установке относительного положения. Как для удобства, так что вы можете выбрать тот, который соответствует стилю и читабельности кода. Доступ к положению требует, чтобы поток был доступным, поэтому они безопасно взаимозаменяемы.


вы можете посмотреть исходный код для обоих методов, чтобы узнать:

стоимость почти идентична (3 ifs и некоторая арифметика). Однако это верно только для перехода к абсолютным смещениям, таким как Position = 0 а не относительные смещения, как Position += 0 в этом случае искать, кажется, немного лучше.

однако вы должны иметь в виду, что мы говорим о производительности нескольких целочисленных atirthmetics и IFS-проверок, это даже не точно измеримо с помощью методов бенчмаркинга. Как уже указывали другие, существенной/обнаруживаемой разницы нет.