c# - LINQ/IEnumerable Skip().Take() efficiency with used with "yield return" -


मेरे पास को छोड़ें () और लो () < / Code> IEnumerable & lt; & gt; के साथ प्रयोग किया जाता है।

मैं अपने सभी डेटा सूचियों को IEnumerable & lt; & gt; के साथ वापस कर रहा हूँ और मैं 'उपज रिटर्न 'मुझे डाटा वापस करने के लिए बड़ी मात्रा में स्मृति आवंटित करने से रोकने के लिए यह बहुत कुशलतापूर्वक काम करता है।

हालांकि, बाद में मेरी प्रक्रिया में मैं इस डेटा को बैच करना चाहता था और एक बार में मेरी प्रविष्टियों से 20 प्रविष्टियों को कहता हूं। मैंने खुद को सोचा .. आह! यह एक गणक को पूरी तरह से फिट बैठता है।

मैंने बहुत उपयोगी छोड़ें () और ले लो () methods IEnumerable interface हालांकि अब मुझे पता चल रहा है कि यह प्रत्येक लूप को हर बार शुरुआत से फिर से जुड़ने का कारण बनता है।

IEnumerable से पेजिंग डेटा का सबसे अच्छा तरीका क्या है? छोड़ें () और लो () के बजाय गणक पर MoveFirst () और MoveNext () का उपयोग कर मैं बेहतर हूं / कोड>?

मैंने कुछ गुगल किए हैं लेकिन कोई जवाब नहीं मिल सकता है ..

क्या कोई मदद कर सकता है?

मुझे LINQ कार्यक्षमता को IEnumerable & lt; & gt; पर पसंद है, लेकिन मुझे दक्षता को ध्यान में रखना होगा।

< P>

आप किसी दिए गए आकार के बैचों के अनुक्रम में वस्तुओं के अनुक्रम को बदलने के लिए एक बैच विधि लिख सकते हैं, स्रोत अनुक्रम को कई बार पुनरावृति करने की आवश्यकता के बिना किया जा सकता है, और जो स्मृति पदचिह्न को एक बार में स्मृति में एक बैच के आकार को धारण करने के लिए सीमित कर सकता है:

  सार्वजनिक स्थिर IEnumerable & lt; IEnumerable & lt; T & gt ; & gt; बैच & lt; T & gt; (यह IEnumerable & lt; T & gt; स्रोत, int batchSize) {सूची & lt; T & gt; बफर = नई सूची & lt; T & gt; (बैचआकार); विदेशी मुद्रा (स्रोत में टी वस्तु) {बफर। जोड़ें (आइटम); अगर (बफ़र। खाता & gt; = बैच आकार) {उपज रिफर बफर; बफर = नई सूची & lt; T & gt; (बैचआकार); }} यदि (बफर.काउंट & gt; 0) {उपज रिफर बफर; }}  

Comments