Dies ist der interne Code für den JsonResult
Typ.
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));
}
Aus der Sicht der interne Code, der JavaScriptSerializer
die Art verwendet, um das Objekt, das Sie an die JsonResult
passieren zu serialisiert. Sie können überprüfen, ob dies der Schritt ist, in dem der Code langsam verarbeitet wird.
Versuchen Sie Ihren Controller so zu machen:
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
}
Wenn das Problem weiterhin besteht, erhalten Sie eine alternative Implementierung könnte, könnten Sie Ihre eigene JsonResult mit der JSON.Net
Bibliothek, implementieren, die better results zur Verfügung stellen kann. Für die Probe, fügen Sie den Namespace:
using Newtonsoft.Json;
Der Controller:
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
}
Und schließlich konnte man die Leistung vergleichen. Eine andere Möglichkeit besteht darin, ein anderes Format zu verwenden, das die Serialisierung beschleunigen kann, z. B. XML oder Binär.
Wie viele Elemente sind insgesamt, ist das Objekt Objekt einfaches Objekt oder komplex? –