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