Jeśli chcesz zresetować strumień do początku (np. MemoryStream
), Jest to najlepsza praktyka
stream.Seek(0, SeekOrigin.Begin);
lub
stream.Position = 0;
Widziałem, że oba działają dobrze, ale zastanawiałem się, czy jeden jest bardziej poprawny niż drugi?
stream.Position = 0;
ale zgadzam się z @jgauffin, po prostu wybieram najbardziej czytelny, oba rozwiązania działają dobrze.Odpowiedzi:
Użyj opcji Pozycja podczas ustawiania pozycji bezwzględnej i Szukaj podczas ustawiania pozycji względnej. Oba są zapewniane dla wygody, więc możesz wybrać taki, który pasuje do stylu i czytelności Twojego kodu. Dostęp do pozycji wymaga, aby strumień był możliwy do przeszukiwania, więc można je bezpiecznie wymieniać.
źródło
stream.Position += 10;
wydaje mi się to całkiem czytelne.Możesz spojrzeć na kod źródłowy obu metod, aby dowiedzieć się:
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,320
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,482
Koszt jest prawie identyczny (3 jeśli i trochę arytmetyki). Jednak jest to prawdziwe tylko w przypadku przeskakiwania do przesunięć bezwzględnych, takich jak,
Position = 0
a nie do przesunięć względnych, takich jakPosition += 0
, w którym to przypadku Seek wydaje się nieco lepszy.Należy jednak pamiętać, że mówimy o wydajności kilku liczb całkowitych i kontroli ifs, które nie są nawet dokładnie mierzalne metodami benchmarkingowymi. Jak inni już wskazali, nie ma znaczącej / wykrywalnej różnicy.
źródło