Вот мой пример кода, который я использую для извлечения данных из базы данных: на 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;
}
}
}
на слое BO я звоню выше метод, как:
List<IGridDataDto> GridDataDtos = MapMultiple(_costDriversGraphDao.GetGraphData(commonSearchCriteriaDto)).ToList();
на картографа методе слой MapMultiple определяется как:
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);
}
Приведенный выше код работает хорошо и хорошо, но мне интересно узнать о двух проблемах с вышеуказанным кодом.
- Как долго будет подключаться устройство чтения данных?
- Когда я рассматриваю только коэффициент эффективности кода, полезно ли использовать «yield return» вместо добавления записи в список и возврата всего списка?
спасибо за ваш быстрый ответ и помощь! –