मैं दाल में एक की आपूर्ति विधि:LinqToSql का उपयोग कर यील्ड रिटर्न डेटाबेस रिकॉर्ड?
public IEnumerable<RecordType> GetRecords()
{
using (LinqDataContext context = new LinqDataContext())
{
var records = context.RecordTable;
foreach (RecordType record in records)
{
yield return record;
}
}
}
उपभोक्ता विधि एक foreach
पाश में रिकॉर्ड का उपयोग करता है। इस तरह से मैं RecordTable
से सभी रिकॉर्ड्स को कैश नहीं करके स्मृति उपयोग को सहेजना चाहता हूं, क्योंकि LinqToSql दृश्य के पीछे डेटा रीडर का उपयोग करता है।
मैं इस परिदृश्य हालांकि पर दो प्रश्न हैं:
यह सच है कि उपज-लौटने ऊपर दिए गए संसाधनों की बचत होती है और तेजी से एक सरणी के लिए सभी रिकॉर्ड कैशिंग से काम करता है (.ToArray())? एक
डेटा कनेक्शन स्वचालित रूप से ठीक से बंद किया जाएगा (मैं
using
बयान मतलब) यदि कोई त्रुटि लेने वाली विधि कीforeach
पाश अंदर हो जाएगा या अगर लेने वाली विधि (बीच मेंforeach
पाश टूट जाएगा की तरह पाया आवश्यक रिकॉर्ड औरbreak
)?
वास्तव में, 2 "जब तक फोन करने वाले ठीक से बर्ताव करता है" है - यह सख्ती से नहीं है के रूप में "गारंटी" अधिकांश के रूप में 'using' –
@MarcGravell मैं तुम्हारे बारे में बात कर रहे हैं नहीं (सही) संभालने हूँ कर रहे हैं पूर्ण संख्यात्मक गणना, या क्या मुझे कुछ और याद आ रही है? –
हां, मैन्युअल रूप से इटेटरेटर चल रहा है, और इसे गलत तरीके से कर रहा है। 'Foreach' का उपयोग करते समय यह कोई समस्या नहीं है, जो सबसे अधिक लोग उपयोग करेंगे। –