これはJsonResult
タイプの内部コードです。ビューのポイント内部コードから
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && string.Equals(context.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
throw new InvalidOperationException(MvcResources.JsonRequest_GetNotAllowed);
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = string.IsNullOrEmpty(this.ContentType) ? "application/json" : this.ContentType;
if (this.ContentEncoding != null)
response.ContentEncoding = this.ContentEncoding;
if (this.Data == null)
return;
JavaScriptSerializer scriptSerializer = new JavaScriptSerializer();
if (this.MaxJsonLength.HasValue)
scriptSerializer.MaxJsonLength = this.MaxJsonLength.Value;
if (this.RecursionLimit.HasValue)
scriptSerializer.RecursionLimit = this.RecursionLimit.Value;
response.Write(scriptSerializer.Serialize(this.Data));
}
、JavaScriptSerializer
はあなたがJsonResult
に渡すオブジェクトをシリアル化するために使用されるタイプです。あなたのコードが遅いプロセスを取っている段階であるかどうかを確認することができます。
は、このようなあなたのコントローラを作ってみる:
public JsonResult Read(....)
{
var all = _userManager.GetStuff();
var watch = Stopwatch.StartNew();
var scriptSerializer = new JavaScriptSerializer();
var json = scriptSerializer.Serialize(all);
Trace.WriteLine("READ" + watch.ElapsedMilliseconds);
watch.Stop();
return json; //Takes 40 milliseconds to get here
}
問題が解決しない場合は、代替手段を実装することができ、あなたがbetter resultsを提供することができますJSON.Net
ライブラリを、使用して、独自化するJsonResultを実装することができます。サンプルについては、名前空間を追加します。
using Newtonsoft.Json;
コントローラ:
public JsonResult Read(....)
{
var all = _userManager.GetStuff();
var watch = Stopwatch.StartNew();
var json = JsonConvert.SerializeObject(all);
Trace.WriteLine("READ" + watch.ElapsedMilliseconds);
watch.Stop();
return Content(json, "application/json"); //Takes 40 milliseconds to get here
}
そして最後に、あなたはパフォーマンスを比較することができます。もう1つの可能な方法は、xmlやバイナリなどのシリアライゼーションをスピードアップできる別のフォーマットを使用することです。
すべてのアイテムはどれくらいありますか?オブジェクトは単純なオブジェクトですか、複雑ですか? –