我有一个奇怪的问题。
从控制器我收到非常慢的响应。到底是怎么回事。 我有一个从这个控制器到我们的后端软件的动态Web服务调用。来自后端的响应在大约30-500ms内处理。 序列化过程大约是0ms-10ms。
当控制器用24K的JsonData将数据返回到客户端(浏览器)时,它需要服务器大约2.8s和250ms来呈现响应,如果服务器返回,即300K的json数据,它只需要500ms到回复和1s渲染..我的方法。
到目前为止,我尝试将序列化从Json更改为JsonNet以计划字符串响应,但都是相同的。
[HttpPost]
public string RetriveMultiple(RequestParams model)
{
Stopwatch st = new Stopwatch();
st.Start();
var def = UI.GetDefinitionFor(model.ModuleName);
var service = DynamicServiceProxy.DynamicServiceHelper.CreateWebService(model.RequestedEntity);
ArrayList filters = new ArrayList();
if (null != model.RequestFilters)
foreach (var f in model.RequestFilters)
{
filters.Add(service.CreateFilter(f.Field, f.Criteria));
}
dynamic response = new string[0];
try
{
response = service.ReadMultiple(filters, model.PageKey, model.PageSize != null ? (int)model.PageSize : 30);
}
catch
{
service = DynamicServiceProxy.DynamicServiceHelper.CreateWebService(model.RequestedEntity, true);
response = service.ReadMultiple(filters, model.PageKey, model.PageSize != null ? (int)model.PageSize : 30);
}
st.Stop();
LogHelper.Info<EntityServiceSurfaceController>(() => {
return string.Concat("Search time ", st.Elapsed.Milliseconds, "ms, row count ", response.Length );
});
st.Reset();
st.Start();
var r = Newtonsoft.Json.JsonConvert.SerializeObject(response);
st.Stop();
LogHelper.Info<EntityServiceSurfaceController>(() => {
return string.Concat("Serialisation time ", st.Elapsed.Milliseconds, "ms, row count ", response.Length);
});
return r;
//return new JsonNetResult
//{
// Data = r
//};
}
}
秒表时间。
2015-12-03 17:48:15,254 - Search time 295ms, row count 17
2015-12-03 17:48:15,254 - Serialisation time 0ms, row count 17
答案 0 :(得分:-1)
它可能是ASP.NET过滤器吗?它们在操作方法之前和之后运行,并实现安全性和日志记录等功能。
检查全局注册的过滤器,通常在App_Start\FilterConfig.cs
。
filters.Add(new HandleErrorAttribute());
filters.Add(new DisallowJsonCachingAttribute());
filters.Add(new ApplyJsonCacheControlAttribute());
另外,检查控制器是否有任何可疑过滤器。
我认为这种方法的速度很慢?还有其他人运作良好吗?