Oto mój przykładowy kod, który używam do pobierania danych z bazy danych: na warstwie DAO:Zastanawiam o stanie połączenia i wpływie na wydajność kodu przez „plon” podczas iteracji po danych czytnika obiektu
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;
}
}
}
na warstwie BO Wołam powyższej metody jak:
List<IGridDataDto> GridDataDtos = MapMultiple(_costDriversGraphDao.GetGraphData(commonSearchCriteriaDto)).ToList();
na odwzorowujący metodą warstwa MapMultiple jest zdefiniowany następująco:
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);
}
Powyższy kod działa dobrze i dobrze, ale zastanawiam się nad dwoma problemami z powyższym kodem.
- Jak długo będzie otwarte połączenie czytnika danych?
- Kiedy rozważam tylko współczynnik wydajności kodu, czy dobrym pomysłem jest użycie "zwrotu plonów" zamiast dodawania rekordu do listy i zwracania całej listy?
dzięki za szybką odpowiedź i pomoc! –