Ho un metodo di fornitura in DAL:Record del database di restituzione del rendimento mediante LinqToSql?
public IEnumerable<RecordType> GetRecords()
{
using (LinqDataContext context = new LinqDataContext())
{
var records = context.RecordTable;
foreach (RecordType record in records)
{
yield return record;
}
}
}
Il metodo dei consumatori utilizza i record in un ciclo foreach
. In questo modo, desidero salvare l'utilizzo della memoria non memorizzando nella cache tutti i record da RecordTable
, poiché LinqToSql utilizza un DataReader dietro la scena.
Ho due domande su questo scenario però:
È vero che il rendimento-ritorno sopra consente di risparmiare risorse e funziona più velocemente di quanto la memorizzazione nella cache tutti i record ad un array (.ToArray())?
Intende la connessione dati automaticamente chiusi correttamente (mi riferisco alla dichiarazione
using
) se si verifica un errore all'interno delforeach
ciclo del metodo di consumare o se il metodo di consumo si romperà il cicloforeach
in mezzo (come trovato un record richiesto ebreak
)?
In realtà, 2 è "fintanto che il chiamante si comporta correttamente" - non è strettamente come "garantito" come la maggior parte 'using' sono –
@MarcGravell sto supponendo che si sta parlando non (correttamente) elencando l'Enumerable completo o mi manca qualcos'altro? –
sì, spostando manualmente l'iteratore e eseguendolo in modo errato. Non è un problema quando si usa 'foreach', che useranno le persone più sensate. –