#c# #asp.net
#c# #asp.net
Вопрос:
Не мог бы кто-нибудь, пожалуйста, объяснить мне различия, если таковые имеются?
Я попытался погуглить, но не смог найти много информации. Возможно, я не использовал правильные ключевые слова.
Любая информация была бы высоко оценена.
Ответ №1:
stream.Seek(x, SeekOrigin.Begin);
и stream.Position = x;
оба результата приводят к тому, что позиция потока устанавливается равной x
. Разница в том, что Position
установщик безоговорочно отбрасывает любой буфер чтения, в то время как Seek
метод пытается сохранить ту часть буфера, которая все еще актуальна для новой позиции.
Вам придется протестировать, какой из них быстрее для вашего сценария, но определенно есть разница в производительности, и ни один из них не быстрее во всех случаях. Мне действительно интересно, почему это различие не задокументировано.
Комментарии:
1. Спасибо, это было важное отличие, о котором я не знал. Помогло мне исправить ошибку, при которой небольшие обратные запросы приводили к неправильным данным. Вместо этого изменено на Position, и данные были прочитаны.
Ответ №2:
В вашем примере нет разницы.
Фактическое различие между Stream.Position
и Stream.Seek
заключается в том, что Position
используется абсолютное смещение, тогда как Seek
используется смещение относительно начала координат, указанного вторым аргументом.
Ответ №3:
Насколько я могу судить, по крайней мере, для этого конкретного случая, ничего.
Для обоих методов Seek() и свойства Position требуется, чтобы CanSeek был true, поэтому, насколько я вижу, это зависит от разработчика.
Seek действительно существует для того, чтобы разрешить поиск из указанных местоположений (SeekOrigins) в смещение (примеры, приведенные в MSDN, несколько запутанны, но отражают цель:http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx ).
Позиция является абсолютной и, очевидно, не предназначена для поиска.
Упомянутый вами случай просто оказывается эквивалентным.
Лично я бы использовал .Position = 0 для перехода к началу потока, поскольку для меня это звучит чище, чем «Искать, используя начало файла в качестве источника и переместите это смещение на 0 байт».