Nano Hash - криптовалюты, майнинг, программирование

Сравнение способов обработки возвращаемых значений SqlDataReader

какой из следующих способов чтения и использования возвращенных записей SqlDataReader лучше?

1 - прямое использование данных:

<table>
<%while(Reader.Read()){%>
<tr>
    <td><%Reader.GetInt32(0)%></td>
    <td><%Reader.GetString(1)%></td>
    <td><%Reader.GetBoolean(2)%></td>
</tr>
<%}%>
</table>

2-чтение записей в список структуры и закрытие соединения как можно скорее, а затем использование прочитанных данных:

<%struct Data{
public int id;
public string name;
public bool active;
}
List<Data> Datas = new List<Data>();
    while(Reader.Read()){
    Datas.Add(new Data(){
        id = Reader.GetInt32(0),
        name = Reader.GetString(1),
        active = Reader.GetBoolean(2)
    }
}
connection.Close();%>
    <table>
<%for(int i=0;i<Datas.Length;i++){%>
    <tr>
        <td><%Datas[i].id%></td>
        <td><%=Datas[i].name%></td>
        <td<%=Datas[i].active%></td>
    </tr>
   <% } %>
    </table>

  • Лучше каким образом? С точки зрения того, как долго вы держите соединение открытым, разделяя проблемы пользовательского интерфейса и доступа к данным, производительность, удобочитаемость, ...? 07.12.2014
  • @MichaelPetito Меня больше всего беспокоит производительность, а затем время соединения остается открытым 07.12.2014

Ответы:


1

Ваш вопрос (и комментарий) предполагает, что вы пытаетесь оптимизировать производительность, но это, вероятно, наименее отличительный аспект двух предоставленных вами примеров.

Я сомневаюсь, что любой из подходов покажет заметный прирост производительности, тем более что SqlDataReader все равно буферизует ваши результаты . Тем не менее, вы можете столкнуться с двумя ситуациями, когда это не совсем так:

  • Повторение многих тысяч записей, и в этом случае вы сможете быстрее отправить некоторые результаты клиенту в потоковом подходе, таком как № 1.
  • Выполнение существенной работы для каждой записи, и в этом случае вы сможете быстрее закрыть соединение в буферизованном подходе, таком как № 2.

Вместо этого вам следует подумать о том, какой подход имеет лучшие конструктивные характеристики, но при этом обеспечивает приемлемую производительность. В этом случае мыслительный процесс, лежащий в основе подхода № 2, определенно имеет преимущества. Разделение вопросов доступа к данным (получение списка Data) от вопросов представления (отображение списка Data) делает ваш код более ремонтопригоден.

Если вам нужно, вы все еще можете достичь характеристик потоковой передачи подхода № 1, если ваш уровень доступа к данным возвращает потоковую передачу IEnumerable<Data> вместо List<Data>.

07.12.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..