веб-сервис заполняет gridview ужасно медленно, как и разбивка на страницы / сортировка - PullRequest
0 голосов
/ 01 марта 2010

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

я запустил svcutil.exe на странице wsdl, и он сгенерировал мне класс и конфигурацию поэтому у меня есть множество строго типизированных объектов, возвращающихся из каждого запроса ко многим сервисным функциям.

Затем я использую LINQ для циклического обхода объектов, собирая необходимую информацию на ходу, но для каждой строки в сетке мне нужно циклически обходить объект, а также получать другой список объектов (из того же запроса) и цикл вокруг каждого из них .. 1 для многих родительский объект> дочерний один .. все это затем переносится в пользовательский набор данных по очереди за раз ... надеюсь, это имеет смысл ....

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

Я подумал, что если при первой загрузке я поместил источник данных сетки в сеанс, я мог бы вытащить его из сеанса, чтобы справиться с поиском / сортировкой и т. П.

в основном это делает ниже

    protected void Page_Load(object sender, EventArgs e)
    {
        //init the datatable
        //grab the filter vars (if there are any)

        WebServiceObj WS = WSClient.Method(args);

        //fill the datatable (around and around we go)
        foreach (ParentObject po in WS.ReturnedObj)
        {
            var COs = from ChildObject c in WS.AnotherReturnedObj
                    where c.whatever.equals(...) ...etc

            foreach(ChildObject c in COs){
               myDataTable.Rows.Add(tlo.this,
                                    tlo.that,
                                    c.thisthing,
                                    c.thatthing,
                                    etc......);
            }
        }
        grdListing.DataSource = myDataTable;
        Session["dt"] = myDataTable;
        grdListing.DataBind();

    }
    protected void Listing_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdListing.PageIndex = e.NewPageIndex;
        grdListing.DataSource = Session["dt"] as DataTable;
        grdListing.DataBind();
    }


    protected void Listing_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dt = Session["dt"] as DataTable;
        DataView dv = new DataView(dt);
        string sortDirection = " ASC";
        if (e.SortDirection == SortDirection.Descending)
            sortDirection = " DESC";

        dv.Sort = e.SortExpression + sortDirection;
        grdListing.DataSource = dv.ToTable();
        grdListing.DataBind();
     }

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

любые предложения / советы, полученные с радостью

спасибо

1 Ответ

0 голосов
/ 10 марта 2010

Возможно, вам лучше работать с необработанным XML, который вы получаете от веб-службы, а не создавать большое количество объектов в памяти (что может замедлить его работу). Вы можете использовать XSLT для генерации XML-представления ваших строк (включая отношения родитель / потомок). Я не являюсь в первую очередь разработчиком .NET, но я уверен, что вы можете заполнить DataSet из XML и присоединить к нему DataTable.

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