如何在传递大量Json对象时改进Asp.net Mvc Application?

时间:2015-11-30 20:02:45

标签: asp.net json asp.net-mvc jsonserializer

我目前正在开发一个报告应用程序来比较多个测试。我需要将一个json对象从控制器传递到客户端,以便为报告绘制所有这些图表。我在这里附上我比较2个测试时得到的结果的图像。传递的数据是~600kb,时间~3秒。 这是我在控制器中使用的代码:

var jsonResult = Json(new
{
  ReportData = reportData
}, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = Int32.MaxValue;
return jsonResult;

如何提高应用程序的性能?非常感谢任何建议。

Ps:如果我的问题不适合这里的标准,请告诉我,我可以调整它。对于所有已经downvoted,请评论,以便我可以改善下一次。谢谢你

enter image description here

1 个答案:

答案 0 :(得分:2)

你应该在这3秒内向下钻取,以确定它们在哪里丢失。这里发生了很多事情:

  1. 您正在从某处构建此reportData变量 - 衡量需要多长时间
  2. 您正在将此reportData变量序列化为JSON - 衡量需要多长时间
  3. 完成这些测量后,您将知道您需要/可以优化的位置。如果事实证明在3中丢失了3分中的2.9分,那么你肯定应该改进查询数据的方式或者优化你的数据存储(考虑到你提供的信息到目前为止,谈论相当困难和主观的事情) 。也许您只是忘了在SQL数据库的某些列中添加索引 - 谁知道。

    另一方面,如果你的瓶颈是2.然后你肯定有一个巨大的设计问题。通常序列化不是问题,除非你做了一些非常错误的事情,比如尝试序列化大量数据,而这些数据是没有人需要的或人类可以消耗的。在这种情况下,您当然应该与发明您正在实施的屏幕的UI人员交谈,并向他们解释在分辨率为1024x768的屏幕上显示100万点几乎没有意义(仅举例)然后当然改进您的查询,以便您的视图模型不是那么庞大。

    所以最重要的是你应该缩小这个时间丢失的地方(使用分析器是一个非常好的开始,我会建议你使用Telerik的JustTrace),这样你就可以准确地知道需要改进的地方。