Stream.Seek (0, SeekOrigin.Begin) hoặc Position = 0


175

Khi bạn cần đặt lại một luồng để bắt đầu (ví dụ MemoryStream), đó là cách tốt nhất để sử dụng

stream.Seek(0, SeekOrigin.Begin);

hoặc là

stream.Position = 0;

Tôi đã thấy cả hai đều hoạt động tốt, nhưng tự hỏi liệu cái này có đúng hơn cái kia không?


1
Nếu đó là để trả về nội dung của luồng bộ nhớ, ToArray hoạt động bất kể vị trí
James Kyburz

3
Trả lời: Người dễ đọc nhất.
jgauffin

7
Cá nhân tôi thích stream.Position = 0;nhưng tôi phải đồng ý với @jgauffin, chỉ cần chọn cách dễ đọc nhất, cả hai giải pháp đều hoạt động tốt.
lenniep

Câu trả lời:


161

Sử dụng Vị trí khi đặt vị trí tuyệt đối và Tìm kiếm khi đặt vị trí tương đối. Cả hai đều được cung cấp để thuận tiện để bạn có thể chọn một cái phù hợp với phong cách và tính dễ đọc của mã của bạn. Truy cập Vị trí yêu cầu luồng có thể tìm kiếm được để chúng có thể hoán đổi cho nhau một cách an toàn.


55
Tôi sử dụng tài sản ngay cả cho các vị trí tương đối: stream.Position += 10;có vẻ khá dễ đọc đối với tôi.
Jon Skeet

6
Có sự khác biệt về tốc độ giữa việc sử dụng SeekOrigin.Begin và SeekOrigin.C hiện tại không?
gonzobrains

6
@gonzobrains "Giá trị trả về: Vị trí mới trong luồng, được tính bằng cách kết hợp điểm tham chiếu ban đầu và phần bù." . Vì vậy, việc kết hợp chi phí nhiều hơn một chút so với chỉ đặt vị trí trực tiếp. Thực tế nó không có nghĩa gì ngoài việc chọn nit. )))
user809128

1
@ user808128 Tài liệu trích dẫn, ít nhất là loại tài liệu đó, không phải là bằng chứng về hiệu suất. Bạn nên tham khảo mã nguồn cho điều đó.
ArekBulski

8

Bạn có thể xem mã nguồn của cả hai phương pháp để tìm hiểu:

Chi phí gần như giống hệt nhau (3 ifs và một số mỹ phẩm). Tuy nhiên, điều này chỉ đúng với việc chuyển sang độ lệch tuyệt đối như thế nào Position = 0và không phải là độ lệch tương đối như thế Position += 0, trong trường hợp đó, Seek có vẻ tốt hơn một chút.

Tuy nhiên, bạn nên nhớ rằng chúng ta đang nói về hiệu suất của một số ít các số liệu atirthologists và ifs, điều đó giống như không thể đo lường chính xác bằng các phương pháp đo điểm chuẩn. Giống như những người khác đã chỉ ra, không có sự khác biệt đáng kể / có thể phát hiện được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.