Stream.Seek (0, SeekOrigin.Begin) veya Pozisyon = 0


175

Bir akışı başlangıç ​​noktasına sıfırlamanız gerektiğinde (ör. MemoryStream) Kullanmak en iyi yöntemdir

stream.Seek(0, SeekOrigin.Begin);

veya

stream.Position = 0;

İkisinin de iyi çalıştığını gördüm, ama birinin diğerinden daha doğru olup olmadığını merak ettim?


1
Bellek akışının içeriğini döndürecekse, ToArray konumdan bağımsız olarak çalışır
James Kyburz

3
Cevap: En okunabilir olanı.
jgauffin

7
Şahsen tercih ederim stream.Position = 0;ama @jgauffin ile hemfikirim, sadece en okunabilir olanı seçin, her iki çözüm de iyi çalışıyor.
lenniep

Yanıtlar:


161

Mutlak bir konum ayarlarken Konum'u, göreceli bir konum ayarlarken Ara'yı kullanın. Her ikisi de kolaylık sağlamak için sağlanmıştır, böylece kodunuzun stiline ve okunabilirliğine uyan birini seçebilirsiniz. Konum'a erişmek, akışın güvenli bir şekilde değiştirilebilir olması için aranabilir olmasını gerektirir.


55
Özelliği göreli pozisyonlar için bile kullanıyorum: stream.Position += 10;bana oldukça okunabilir görünüyor.
Jon Skeet

6
SeekOrigin.Begin ve SeekOrigin.Current kullanımı arasında bir hız farkı var mı?
gonzobrains

6
@gonzobrains "Dönüş Değeri: Akış içindeki ilk referans noktası ile ofseti birleştirerek hesaplanan yeni konum." . Bu yüzden birleştirme sadece pozisyonu doğrudan ayarlamaktan biraz daha pahalıya mal olur. Pratik olarak nit toplamadan başka bir şey ifade etmiyor. )))
user808128

1
@ user808128 Belgelere alıntı yapmak, en azından bu tür belgeler, performans kanıtı değildir. Bunun için kaynak kodlarına başvurmalısınız.
ArekBulski

8

Bulmak için her iki yöntem için de kaynak koduna bakabilirsiniz:

Maliyet neredeyse aynı (3 ifs ve bazı aritmetik). Ancak bu sadece Position = 0göreli ofset gibi değil , mutlak ofsete atlamak için de geçerlidir Position += 0, bu durumda Ara biraz daha iyi görünür.

Bununla birlikte, bir avuç tamsayı atirthmetics'in performansından ve ifs kontrollerinden bahsettiğimizi aklınızda bulundurmalısınız; bu, kıyaslama yöntemleriyle doğru bir şekilde ölçülemez. Diğerlerinin de belirttiği gibi, önemli / saptanabilir bir fark yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.