Span<T>
स्टैक-केवल प्रकृति है जबकि Memory<T>
ढेर का उपयोग कर सकते हैं।
Span<T>
एक नए प्रकार हम मंच टी के साथ [] सममूल्य पर प्रदर्शन विशेषताओं के साथ मनमाना स्मृति के सटे क्षेत्रों, का प्रतिनिधित्व करने के लिए जोड़ रहे हैं है। इसकी एपीआई सरणी के समान हैं, लेकिन सरणी के विपरीत, यह या तो प्रबंधित या मूल मेमोरी, या को स्टैक पर आवंटित स्मृति के लिए इंगित कर सकता है।
Memory <T>
एक प्रकार Span<T>
पूरक है। जैसा कि इसके डिजाइन दस्तावेज़ में चर्चा की गई है, Span<T>
एक स्टैक-केवल प्रकार है। Span<T>
की स्टैक-केवल प्रकृति कई परिदृश्यों के लिए अनुपयुक्त बनाती है जिन्हें ढेर पर संदर्भों को संदर्भित करने की आवश्यकता होती है (Span<T>
के साथ प्रतिनिधित्व) ढेर पर, उदा। के लिए एसिंक्रोनस कॉल करने के दिनचर्या।
async Task DoSomethingAsync(Span<byte> buffer) {
buffer[0] = 0;
await Something(); // Oops! The stack unwinds here, but the buffer below
// cannot survive the continuation.
buffer[0] = 1;
}
इस समस्या का समाधान करने के लिए, हम पूरक प्रकार का एक सेट प्रदान करेगा, का प्रतिनिधित्व सामान्य प्रयोजन विनिमय प्रकार, सिर्फ Span <T>
की तरह, मनमाने ढंग से स्मृति की एक श्रृंखला के रूप में इस्तेमाल किया जा करने का इरादा है, लेकिन विपरीत Span <T>
इन प्रकारों को स्मृति को पढ़ने और लिखने के लिए महत्वपूर्ण प्रदर्शन दंड की लागत पर केवल स्टैक-केवल नहीं होगा।
async Task DoSomethingAsync(Memory<byte> buffer) {
buffer.Span[0] = 0;
await Something(); // The stack unwinds here, but it's OK as Memory<T> is
// just like any other type.
buffer.Span[0] = 1;
}
ऊपर नमूने में, Memory <byte>
बफर प्रतिनिधित्व करने के लिए प्रयोग किया जाता है। यह एक नियमित प्रकार है और एसिंक्रोनस कॉल करने के तरीके में उपयोग किया जा सकता है। इसकी अवधि संपत्ति Span<byte>
लौटाती है, लेकिन लौटा मूल्य एसिंक्रोनस कॉल के दौरान ढेर पर संग्रहीत नहीं होता है, बल्कि नए मान Memory<T>
मान से उत्पादित होते हैं। एक अर्थ में, Memory<T>
Span<T>
का एक कारखाना है।
संदर्भ दस्तावेज़: here
यह भी देखें: [सी # 7.2: स्पैन समझना] (https://channel9.msdn.com/Events/Connect/2017/T125) –
@JeffMercado क्या सी # प्रकारों की स्ट्रिंग के अलावा वे कहीं भी एक पूर्ण सूची है []? क्या वे केवल सरणी के लिए हैं या इन्हें सूची जैसे प्रकारों के बजाय भी इस्तेमाल किया जा सकता है? –
user3610374