2012-01-19 15 views
5

Profiluję moją aplikację ASP.NET MVC i kiedy trafiam moją lokalną wersję na IIS i zauważyłem, że deserializacja obiektu około 77kb zajmuje około 100ms, czy jest to oczekiwane?Wydajność json.net nad ciągiem json 77kb

Również procesor wydaje się maksymalizować podczas ich profilowania, jest zadaniem deserializacji bardzo intensywne, czy powinienem szukać gdzie indziej?

Dzięki za pomoc, którą możesz udzielić.

+0

Zawsze możesz znaleźć źródło json.net i profilu, aby zobaczyć, co jest tak intensywne. Trudno będzie zasugerować cokolwiek bez dodatkowych informacji (lub danych). –

+0

Zrobiłem kilka próbkowania za pomocą profilera VS, a największa ilość próbkowania wydaje się być 'JsonConvert.DeserializeObject' – Mark

Odpowiedz

2

Złożoność obiektu zwykle odgrywa ważną rolę w odniesieniu do deserializacji. Obiekty zawierające obiekty potomne w rekurencyjnym schemacie będą wykorzystywać procesor i pamięć do poprawnego analizowania.

Prosta nazwa: mapa wartości może stać się bardziej złożona, jeśli wartość jest inną mapą (obiektem) nazwy: wartość. Jeśli ten typ rekurencji trwa, możesz spróbować denormalizować (tworząc nazwę: [prymitywny] Wartość) swojego JSON, aby system mógł łatwiej parsować.

Denormalizacja w odniesieniu do MVC (dane rdbms) może być nieco trudna. Spłaszczanie relacji wielu do wielu nie jest możliwe w wielu przypadkach.

Możesz spróbować porównać JSON.net z wbudowanym JavaScriptSerializer i sprawdzić, czy możesz uzyskać poprawę.

0

W pewnym momencie obiekty stają się kłopotliwe, aby deserialise, biorąc pod uwagę, że kilka frameworków serializacji, włączając JSON.NET, wykorzystuje Reflection. Ponadto, gdy obiekt osiągnie rozmiar 85 KB, jest on natychmiast wysyłany do sterty dużych obiektów przez Garbage Collector, co ma wpływ na wydajność.

Proponuję użyć JSON# - wydajnego sentrentrycznego parsera JSON .NET w celu poprawy wydajności i uniknięcia wąskich gardeł w pamięci.