Обработка большого количества данных в ASP-NET MVC - PullRequest
0 голосов
/ 24 июня 2019

Я начинаю программировать с ASP-NET MVC приложение с Angular для внешнего интерфейса и SQL Server для базы данных.В некоторых случаях у меня сложный запрос, который мне приходится использовать, и я не могу изменить его из-за ограничений бизнеса.Я использую структуру, подобную этой: с использованием простых запросов в ASP.NET MVC , но я не знаю, как правильно обрабатывать большое количество данных и показывать их во внешнем интерфейсе.

У меня есть ViewModel со структурой данных запроса результатов, DomainModel, где расположен запрос, и контроллер для связи с внешним интерфейсом.

Моя проблема в том, что я не знаю, какой способ развить то, что я пытаюсь сделать.Сейчас я пытаюсь создать столько объектов в списке объектов, сколько строк в моем запросе, но когда этот метод запущен, мой компьютер блокируется, и не отображается никаких ошибок (могу предположить, что это происходит из-за использования всей памяти).

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

Это часть DomainModel:

public IEnumerable<OperationView> GetOperations()
{
    List<OperationView> Operationslist = new List<OperationView>();
    using (SqlConnection connection = new SqlConnection(connectionString))
    using (SqlCommand command = new SqlCommand("", connection))
    {
        command.CommandText = /*Query joining 8-10 tables*/;
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            var OperationView = new OperationView();
            OperationView.IdOperacion = reader["ID_OPERACION"].ToString();
            //Loading here some other variables of OperationView
            Operationslist.Add(OperationView);
        }
        connection.Close();
    }
    return Operationslist;
}

Это часть контроллера:

public IEnumerable<OperationView> GetOperaciones()
{
    var Operation = new OperationPDomainModel();
    return Operation.GetOperations();
}

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

В настоящее время, если я пытаюсь запустить компьютер, компьютер выключается безоговорочно ...

Ответы [ 3 ]

0 голосов
/ 24 июня 2019

Поскольку вашей системе не хватает памяти, вы должны иметь нумерацию страниц.

Эта подкачка должна выполняться на стороне базы данных. UI просто нужно передать индекс страницы и количество записей, отображаемых на странице.

Таким образом, ваш запрос должен быть таким, как показано ниже

Выберите a, b, c, ROW_NUMBER () OVER (ORDER BY a) rnum из foo где rnum между (25 * Page_Index) + 1 и (25 * Page_Index) + 25

0 голосов
/ 25 июня 2019

проверить это Посмотреть миллионы записей

https://www.c -sharpcorner.com / статьи / как-на-свитка-и-View-миллионы-из-записей /

0 голосов
/ 24 июня 2019

Есть несколько улучшений, которые вы можете сделать.

Сделать вызов асинхронным

Операция зависнет, поскольку она блокирует основной поток.Если возможно, попробуйте эту операцию асинхронно.Используйте программирование на основе задач для запуска операции в другом потоке.Это должно сделать немного лучше, а не улучшать это значительно.

Использовать нумерацию страниц

Получите только количество записей, которые нужно отобразить на странице.Это должно быть лучшим улучшением на основе вашего кода.Также было бы лучше иметь еще несколько фильтров, если это возможно.Но получить только 25 записей, если вам нужно только 25, должно быть.Также было бы полезно, если бы вы могли использовать современные методы программирования, такие как EF и LINQ, вместо традиционных ADO.Net

Использовать Ajax

Такая большая обработка должна выполняться с использованием вызовов AJAX.Если вы не хотите, чтобы пользователь ждал загрузки данных, вы можете загрузить страницу и сделать получение данных частью отдельного вызова AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...