I tienen un método de suministro en DAL:Registros de base de datos de rendimiento de rendimiento utilizando LinqToSql?
public IEnumerable<RecordType> GetRecords()
{
using (LinqDataContext context = new LinqDataContext())
{
var records = context.RecordTable;
foreach (RecordType record in records)
{
yield return record;
}
}
}
El método consumidor utiliza los registros en un bucle foreach
. De esta forma quiero guardar el uso de la memoria al no almacenar en caché todos los registros desde RecordTable
, ya que LinqToSql usa un DataReader detrás de la escena.
Tengo dos preguntas sobre este escenario: aunque
Es eso cierto que el rendimiento por encima de retorno de ahorro de recursos y funciona más rápido que el almacenamiento en caché todos los registros a una matriz (.ToArray())?
¿La conexión de datos de forma automática correctamente cerrada (me refiero a la declaración
using
) si se producirá un error en el interior delforeach
bucle del método consume o si el método que consume romperá el bucleforeach
en el medio (como el encontrado una registro requerido ybreak
)?
En realidad, el 2 es "siempre y cuando la persona que llama se comporta adecuadamente" - no es estrictamente como "garantizada" ya que la mayoría son 'using' –
@MarcGravell Asumo que estás hablando no (correctamente) enumerando el enumerable completo, o ¿me estoy perdiendo algo más? –
sí, caminando manualmente el iterador y haciéndolo incorrectamente. No es un problema cuando se usa 'foreach', que usarán las personas más cuerdas. –