2009-02-20 9 views
1

J'ai une application asp.net qui sérialise les données au client en utilisant JSON. Une fois que la charge atteint un certain niveau, l'application passe un temps d'in-ordinate dans GC et après avoir passé du temps avec WinDbg/SOS et les outils connexes, il semble qu'il y ait une quantité importante de fragmentation LOH en raison de la taille du JSON généré est souvent assez grand pour dépasser la limite de 86K du LOH..NET Large Object Heap et l'interaction JSON

Ma question 2 fois 1) Quelqu'un at-il exécuter ce scénario spécifique de génération impactant JSON et entraîner une fragmentation de LOH et 2) Est-ce que quelqu'un a des suggestions sur la façon de le gérer.

Répondre

1

Si vous générez un grand nombre de chaînes> 85K, les performances sont problématiques.

Avez-vous besoin de générer entièrement les données avant de les envoyer au client? Si votre bibliothèque JSON prend en charge l'écriture des données dans un Stream/TextWriter et que l'API de réponse du client le supporte, je chaînerais l'un vers l'autre tout en évitant le problème. Si vous ne pouvez pas faire cela, vous devrez peut-être recourir à la mise en commun d'objets, ce qui ne fonctionnera pas sur les chaînes et vous devrez utiliser char [] ou byte [] (Un MemoryStream vous facilitera la tâche) réutiliser le tableau de sauvegarde. Probablement un par fil suffit. Vous voudrez peut-être traiter les cas où, par une réponse massive inhabituelle, le tableau sous-jacent se gonfle et se conserve ensuite.