2012-01-19 9 views
5

Estoy perfilando mi aplicación ASP.NET MVC y cuando llegué a mi versión local en IIS y noté que deserializar un objeto de 77kb lleva unos 100 ms, ¿se espera esto?json.net rendimiento sobre una cadena json 77kb

También parece que la CPU se agota al máximo mientras que estoy perfilando, ¿la tarea de deserializar es muy intensa o debería buscar en otro lado?

Gracias por cualquier ayuda que pueda dar.

+0

Siempre puede obtener la fuente de json.net y el perfil para ver cuál es tan intenso. Será difícil sugerir algo sin más información (o datos) –

+0

He hecho algunas muestras usando el perfil VS y la mayor cantidad de muestras parece ser 'JsonConvert.DeserializeObject' – Mark

Respuesta

2

La complejidad del objeto generalmente juega un papel importante en lo que respecta a la deserialización. Los objetos que contienen objetos secundarios en un patrón recursivo consumirán CPU y memoria para analizar correctamente.

Un nombre simple: el mapa de valores puede volverse mucho más complejo si el Valor es otro mapa (objeto) de Nombre: Valor. Si este tipo de recursión continúa, puede intentar desnormalizar (haciendo un Nombre: Valor [primitivo]) su JSON para que sea más fácil de analizar.

La desnormalización con respecto a MVC (datos rdbms) puede ser un poco difícil. En muchos casos, no es factible relajar las relaciones de muchos a muchos.

Puede intentar comparar JSON.net con el JavaScriptSerializer incorporado y ver si puede obtener una mejora.

0

En cierto punto, los objetos se vuelven difíciles de deserializar, dado que varios marcos de serialización, incluido JSON.NET, aprovechan Reflection. Además, cuando un objeto alcanza un tamaño de 85 KB, el Recolector de basura lo empuja inmediatamente hacia el Gran montón de objetos, lo que tendrá un impacto en el rendimiento.

Sugiero usar JSON# - un analizador sintáctico de rendimiento JNET .NET para mejorar el rendimiento y evitar los cuellos de botella en la memoria.

Cuestiones relacionadas