Je me pose des questions sur l'état de la connexion et de l'impact sur les performances du code par "rendement" lors de l'itération sur les données objet de lecteur

Voici mon exemple de code que j'utilise pour récupérer des données de la base de données:
sur la couche DAO:

public IEnumerable<IDataRecord> GetDATA(ICommonSearchCriteriaDto commonSearchCriteriaDto)
{
    using(DbContext)
    {
        DbDataReader reader = DbContext.GetReader("ABC_PACKAGE.GET_DATA", oracleParams.ToArray(), CommandType.StoredProcedure);
        while (reader.Read())
        {
            yield return reader;
        }
    }
}

Sur BO couche, je suis l'appel de la méthode ci-dessus comme:

List<IGridDataDto> GridDataDtos = MapMultiple(_costDriversGraphDao.GetGraphData(commonSearchCriteriaDto)).ToList();

sur mappeur couche MapMultiple méthode est définie comme:

public IGridDataDto MapSingle(IDataRecord dataRecord)
{
    return new GridDataDto
    {
        Code = Convert.ToString(dataRecord["Code"]),
        Name = Convert.ToString(dataRecord["Name"]),
        Type = Convert.ToString(dataRecord["Type"])     
    };
}
public IEnumerable<IGridDataDto> MapMultiple(IEnumerable<IDataRecord> dataRecords)
{
    return dataRecords.Select(MapSingle);
}

Le code ci-dessus fonctionne bien, mais je me pose des questions sur deux préoccupations avec le code ci-dessus.

  1. Combien de temps les données du lecteur de connexion sera ouvert?
  2. Quand je considère le code de facteur de performance seulement, Est-ce une bonne idée d'utiliser les "taux de retour" au lieu d'ajout d'enregistrement dans une liste et le retour de l'ensemble de la liste?

OriginalL'auteur Sanjeev Rai | 2013-03-13