Я пытаюсь создать новую веб-страницу, на которой мне нужно отобразить почти 10 различных видов сетки и диаграмм.
Gridviews привязываются к событию загрузки страницы, а диаграммы отображаются с использованием метода jquery-ajax (с использованием amcharts, а также highcharts) путем вызова WebMethod.
Первоначально я реализовал страницу таким образом, что после выполнения одного и того же набора хранимых процедур для просмотра сетки (для отображения данных представления сетки) и веб-методов (для рисования диаграмм). Таким образом, одни и те же sps выполняются дважды для этой страницы (один для сетки и другой для диаграммы ).Для извлечения данных требуется выполнить 10 операций.
Итак, для повышения производительности страницы я создал статическую таблицу данных, подобную этой.
static DataTable Report1;
и привязал вид сетки следующим образом.
private void gvbindReport1()
{
try
{
Report1 = new DataTable();//refreshed datatable
DataSet ReportDS1 = objmvbl.GetReportGraph(ClientID, date_From, date_To);
if (ReportDS1.Tables.Count > 0)
{
Report1 = ReportDS1.Tables[0];//bindinding data to static datatable
}
GdReport.DataSource = Report1;
GdReport.DataBind();
}
catch (Exception ex)
{
Log.Errlog("Error Occured in gvbindReport1 : " + ex.Message.ToString());
}
}
и внутри веб-метода я использовал ту же таблицу данных для рисования диаграммы, подобной этой
[System.Web.Services.WebMethod]
public static string GetDataReport1()
{
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
try
{
//processing for the data inside static datatable
if (Report1.Rows.Count > 0)
{
foreach (DataRow dr in Report1.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in Report1.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
}
}
catch (Exception ex)
{
Log.Errlog("Error Occured in GetDataReport WebMethod of Report Page : " + ex.Message.ToString());
}
return serializer.Serialize(rows);
}
с этим я могу показать как сетку, так и диаграммы.
Теперь, пожалуйста, скажите мне, это правильный подход к работе с веб-методами? я читал, что вебметод не имеет никакого отношения к странице и все такое. Подскажите пожалуйста недостатки этого метода.
Если это не так, предложите лучший способ улучшить производительность страницы?
JavaScriptSerializer
. Если вы просто вернетеList<Dictionary<string, object>>
напрямую, ASP.NET справится с его сериализацией. Он делает это независимо от вашего типа возвращаемого значения, поэтому ваш текущий код выполняетсяJavaScriptSerializer
дважды для результата (и вам приходится дважды анализировать его на стороне клиента). Дополнительная информация: encosia.com/ - person Dave Ward   schedule 30.09.2015