改善WebService的响应 [英] Improve WebService Response
本文介绍了改善WebService的响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经用Json创建了一个项目...来自Web服务的所有内容都转换为json,但是当我从菜单中选择某些项目时,响应时间很慢.
有人知道如何减少时间吗?
问候.
Default.aspx页的代码:
Hi I had create a project with Json ... Everything that cames from webservice is converted to json but the time of response is very slow when i select some item from the menu.
Anyone knows how to reduce the time?
Regards.
Code of Default.aspx page:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using ZonMyAval.MyAval;
namespace ZonMyAval
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<guid> businesses = null, grades = null, components = null;
HiddenField HF_SelectedBusinesses = (HiddenField)Form.Parent.FindControl("HF_SelectedBusinesses");
HiddenField HF_SelectedGrades = (HiddenField)Form.Parent.FindControl("HF_SelectedGrades");
HiddenField HF_SelectedComponents = (HiddenField)Form.Parent.FindControl("HF_SelectedComponents");
HiddenField HF_SelectedPeriod = (HiddenField)Form.Parent.FindControl("HF_SelectedPeriod");
Period period = string.IsNullOrEmpty(HF_SelectedPeriod.Value) ? Period.Daily : (Period)System.Enum.Parse(typeof(Period), HF_SelectedPeriod.Value);
if (!string.IsNullOrEmpty(HF_SelectedBusinesses.Value))
{
businesses = new List<guid>();
foreach (string business in HF_SelectedBusinesses.Value.Split('|'))
businesses.Add(new Guid(business));
}
if (!string.IsNullOrEmpty(HF_SelectedGrades.Value))
{
grades = new List<guid>();
foreach (string grade in HF_SelectedGrades.Value.Split('|'))
grades.Add(new Guid(grade));
}
if (!string.IsNullOrEmpty(HF_SelectedComponents.Value))
{
components = new List<guid>();
foreach (string component in HF_SelectedComponents.Value.Split('|'))
components.Add(new Guid(component));
}
ConvertToJSON("Sales", "CreateSalesArray", Context.User.Identity.Name, businesses, grades, components, period);
ConvertToJSON("Metrics", "CreateMetricsArray", Context.User.Identity.Name, businesses, grades, components, null);
if (IsPostBack)
ScriptManager.RegisterStartupScript(this, this.GetType(), "Refresh", "RefreshData();", true);
}
private static List<getsales_result> CreateMetricsArray(string user, List<guid> businesses, List<guid> grades, List<guid> components)
{
DateTime searchDate = DateTime.Parse(ConfigurationManager.AppSettings["SearchDate"]);
MyAval.ZonMyAval_DAL service = new MyAval.ZonMyAval_DAL();
List<getsales_result> _Sales = new List<getsales_result>();
_Sales = service.GetSales(user, Hierarchy.Organizational, Period.Monthly, searchDate, businesses == null ? null : businesses.ToArray(), grades == null ? null : grades.ToArray(), components == null ? null : components.ToArray()).ToList();
GetSales_Result lastYearMonth = service.GetSales(user, Hierarchy.Organizational, Period.Monthly, searchDate.AddYears(-1), businesses == null ? null : businesses.ToArray(), grades == null ? null : grades.ToArray(), components == null ? null : components.ToArray()).OrderByDescending(o => o.resultorder).FirstOrDefault();
if (lastYearMonth != null)
_Sales.Add(lastYearMonth);
//TEST
//_Sales.Add(new GetSales_Result
//{
// VendasLiquidas = 14090,
// VendasBrutas = 19500,
// Ativacoes = 18000,
// Pendentes = 2000,
// resultorder = 201204,
// data = "Abril"
//});
//_Sales.Add(new GetSales_Result
//{
// VendasLiquidas = 15700,
// VendasBrutas = 21070,
// Ativacoes = 18200,
// Pendentes = 3000,
// resultorder = 201203,
// data = "Março"
//});
//_Sales.Add(new GetSales_Result
//{
// VendasLiquidas = 17700,
// VendasBrutas = 20070,
// Ativacoes = 16020,
// Pendentes = 2500,
// resultorder = 201202,
// data = "Fevereiro"
//});
//_Sales.Insert(_Sales.Count - 1, new GetSales_Result
//{
// VendasLiquidas = 23090,
// VendasBrutas = 18700,
// Ativacoes = 18080,
// Pendentes = 1400,
// resultorder = 201106,
// data = "Junho"
//});
//END TEST
foreach (var sale in _Sales)
sale.data = string.Format("{0} {1}", sale.data, sale.resultorder.Value / 100).ToUpper();
return _Sales.OrderByDescending(o => o.resultorder).ToList();
}
private static List<myaval.getsalesbynode_result> CreateSalesArray(string user, List<guid> businesses, List<guid> grades, List<guid> components, Period period)
{
MyAval.ZonMyAval_DAL soap = new MyAval.ZonMyAval_DAL();
List<myaval.getsalesbynode_result> _Sales = new List<myaval.getsalesbynode_result>();
_Sales = soap.GetSalesByNode(user, Hierarchy.Organizational, period, new DateTime(2012, 06, 20), businesses == null ? null : businesses.ToArray(), grades == null ? null : grades.ToArray(), components == null ? null : components.ToArray()).ToList();
return _Sales;
}
public void ConvertToJSON(string Var, string Method, string user,List<guid> businesses, List<guid> grades, List<guid> components, Period? period)
{
Random r = new Random();
MethodInfo methodInfo = typeof(Default).GetMethod(Method, System.Reflection.BindingFlags.Static | BindingFlags.NonPublic);
object returnValue;
if (methodInfo.GetParameters().Length == 4)
returnValue = methodInfo.Invoke(null, new object[] { user, businesses, grades, components });
else if (methodInfo.GetParameters().Length > 4)
returnValue = methodInfo.Invoke(null, new object[] { user, businesses, grades, components, period.Value });
else
returnValue = methodInfo.Invoke(null, new object[] { });
JavaScriptSerializer jss1 = new JavaScriptSerializer();
string _myJSONstring = jss1.Serialize(returnValue);
string docs = "var " + Var + "=" + _myJSONstring + ";";
//Page.ClientScript.RegisterClientScriptBlock(typeof(UpdatePanel), Var + r.Next(5000), docs, true);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), Var + r.Next(5000), docs, true);
}
}
}</guid></guid></guid></myaval.getsalesbynode_result></myaval.getsalesbynode_result></guid></guid></guid></myaval.getsalesbynode_result></getsales_result></getsales_result></guid></guid></guid></getsales_result></guid></guid></guid></guid>
推荐答案
JSON数据最好在Javascript中使用,而不是在C#代码中使用.根据您的代码,您正在执行非常大的字符串处理操作,这不可避免地会降低性能.尝试在javascript中使用JSON字符串,看看有什么区别.
JSON data is best used in Javascript, not in C# code. As per your code you are doing a really big string crunching operation, and that''s unavoidably reducing the performance. Try to use the JSON string in javascript and see the difference.
这篇关于改善WebService的响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文