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