2010-03-01 2 views
0

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

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

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

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

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

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

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 столбцов (иш) и целая загрузка строк .. с добавлением большего количества данных, которые веб-служба запрашивает из все время

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

благодаря

ответ

0

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

Смежные вопросы