Stream.Seek (0, SeekOrigin.Begin) या स्थिति = 0


175

जब आपको शुरुआत करने के लिए एक धारा को रीसेट करने की आवश्यकता होती है (जैसे MemoryStream) यह उपयोग करने के लिए सबसे अच्छा अभ्यास है

stream.Seek(0, SeekOrigin.Begin);

या

stream.Position = 0;

मैंने दोनों को ठीक काम करते देखा है, लेकिन सोच रहा था कि क्या एक दूसरे से ज्यादा सही था?


1
यदि यह मेमोरी स्ट्रीम की सामग्री को वापस करना है, तो ToArray स्थिति की परवाह किए बिना काम करता है
James Kyburz

3
उत्तर: सबसे अधिक पठनीय है।
jgauffin

7
मैं व्यक्तिगत रूप से पसंद करता stream.Position = 0;हूं लेकिन मुझे @jgauffin से सहमत होना होगा, बस सबसे पठनीय का चयन करना चाहिए, दोनों समाधान ठीक काम करते हैं।
lenniep

जवाबों:


161

एक पूर्ण स्थिति सेट करते समय स्थिति का उपयोग करें और एक सापेक्ष स्थिति सेट करते समय तलाश करें। दोनों सुविधा के लिए प्रदान किए जाते हैं ताकि आप अपने कोड की शैली और पठनीयता के अनुकूल एक का चयन कर सकें। स्थिति तक पहुँचने के लिए स्ट्रीम को सुरक्षित करने की आवश्यकता होती है ताकि वे सुरक्षित रूप से विनिमेय हों।


55
मैं रिश्तेदार पदों के लिए भी संपत्ति का उपयोग करता हूं: stream.Position += 10;मेरे लिए बहुत पठनीय लगता है।
जॉन स्कीट

6
वहाँ SeekOrigin.Begin और SeekOrigin.Current का उपयोग करने के बीच एक गति अंतर है?
गोंजोब्राईंस

6
@gonzobrains "रिटर्न वैल्यू: स्ट्रीम के भीतर नई स्थिति, प्रारंभिक संदर्भ बिंदु और ऑफसेट के संयोजन द्वारा गणना की जाती है।" । इसलिए संयोजन सीधे स्थिति सेट करने की तुलना में थोड़ा अधिक खर्च करता है। व्यावहारिक रूप से इसका मतलब नट-पिकिंग के अलावा कुछ नहीं है। )))
user808128

1
@ user808128 कम से कम इस तरह के प्रलेखन का दस्तावेजीकरण करना, प्रदर्शन का प्रमाण नहीं है। आपको उसके लिए स्रोत कोड का उल्लेख करना चाहिए।
ArekBulski

8

आप पता लगाने के लिए दोनों तरीकों के लिए स्रोत कोड देख सकते हैं:

लागत लगभग समान है (3 ifs और कुछ अंकगणित)। हालाँकि, यह केवल पूर्ण ऑफ़सेट्स पर कूदने के लिए ही सही है, जैसे Position = 0कि सापेक्ष ऑफ़सेट्स की तरह नहीं Position += 0, जिस स्थिति में सीक थोड़ा बेहतर लगता है।

हालाँकि आपको यह ध्यान रखना चाहिए कि हम एक मुट्ठी भर पूर्णांक आतिथ्यमिक्स और अगर आई चेक के बारे में बात कर रहे हैं, तो मानदंड विधियों के साथ सटीक रूप से मापनीय भी नहीं है। दूसरों की तरह पहले से ही बताया, कोई महत्वपूर्ण / पता लगाने योग्य अंतर नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.