Слишком много времени, чтобы получить и отобразить результат в сетке Telerik. - PullRequest
0 голосов
/ 25 марта 2011

У меня есть приложение MVC, в котором мне нужно отобразить данные из 3 таблиц. Я использую модель сущности для этого. Из них в 2 я сделал ассоциацию: пользователи и таблица платежей.

И 3-я таблица month_<monthid> создается каждый месяц для хранения пользователей, которым отправляется журнал. Имя таблицы month_<monthid> генерируется динамически путем выбора месяца, поэтому для извлечения данных я использовал ExeuteStoreQuery. Для небольшого количества данных листинг быстрый, но для большого количества очень медленный.

Теперь я создал класс для привязки к сетке, который будет включать все поля из 3 таблиц для отображения. Но здесь, когда я получаю большой объем данных около 12000, тогда требуется около 30 минут, чтобы пройти цикл и присвоить данные объекту класса, а затем добавить его в список результатов, который в итоге привязывается к сетке Telerik.

Я прилагаю пример кода, используя ссылку. Есть ли прямой способ привязать результат запроса объединенных таблиц к сетке вместо прохождения цикла и подготовки списка для класса модели, который, я думаю, сэкономит время. Блок кода для подготовки списка с использованием Executestorequery находится под функцией GetuserList ().

foreach (var r in result)
                {

                    Result  objresult = new Result();
                    var paymentresult = from sub in dtpayment.AsEnumerable() where sub.Field<int>("user_id") == r.user_id select sub;
                    if (paymentresult.Count() > 0)
                    {

                        objresult.amount_paid = paymentresult.FirstOrDefault().Field<decimal>("amount_paid");
                        objresult.magzine_id = paymentresult.FirstOrDefault().Field<int>("magzine_id");
                    }
                    objresult.address=r.address;
                    objresult.email=r.email;
                    objresult.name=r.name;
                    objresult.user_id=r.user_id;
                    objresult.month= smonth;
                    lstresult.Add(objresult);
                }

Этот блок кода цикла for занимает очень много времени, когда я использую ExceuteStoreQuery. Но я заметил, что при простом объединении пользователей и таблицы платежей с помощью запроса LINQ для получения всех 12000 записей, т.е. без участия таблицы месяцев, результат появляется быстрее. Итак, можете ли вы предложить какой-либо способ улучшить производительность моего приложения?

Также включите структуру базы данных с примером кода. Ниже приведена ссылка на образец

http://sampletestone.s3.amazonaws.com/magzine.7z?AWSAccessKeyId=AKIAINHDRCMKC5GUSNFA&Expires=1303583399&Signature=8o8Wn6UNjbEl3dIyipAX9xH29Hg%3D

Supriya

1 Ответ

0 голосов
/ 25 марта 2011

Никто в мире не хочет видеть 12 000 записей.Вам следует взглянуть на реализацию функций подкачки и поиска.

...