Je travaille sur un projet qui traite et établit des rapports sur de grands ensembles de données agrégeables basées sur des lignes. Il y a un service d'agrégation primaire, puis de nombreux clients qui peuvent s'abonner à différentes vues des données à partir de ce serveur. Les objets sont transmis dans les deux sens entre le serveur Java et les clients C#, encodés en JSON. Nous constatons que l'analyse syntaxique des objets prend beaucoup de temps et consomme beaucoup de mémoire. D'autres personnes ont-elles utilisé JSON à cette fin ou constaté un comportement similaire ?
Réponses
Trop de publicités?Nous avions l'habitude d'utiliser directement le XML à travers le fil et nous devions utiliser une sérialisation personnalisée (c'est-à-dire manuelle) pour beaucoup d'objets. Bien qu'il ne s'agisse pas de JSON, nous avions des problèmes de performance dus à cette contrainte. Une fois que nous avons migré toutes nos technologies vers une architecture similaire, nous avons pu passer à la sérialisation binaire, qui fonctionne beaucoup mieux.
Cependant, nous avons apporté quelques modifications aux objets pour lesquels la taille posait problème en termes de performances. Comme nous avions accès au code des deux côtés (et que les deux étaient en c#), nous avons pu sérialiser binairement la charge utile, puis la coder en base64 puisqu'il s'agissait de texte à travers le fil. Cela a permis de réduire considérablement la taille des objets et la sérialisation s'est déroulée un peu plus rapidement.
Comme vous passez de Java à C#, vous n'aurez pas vraiment ce luxe. La seule chose à laquelle je peux penser dans votre cas est d'essayer d'optimiser l'analyse de la réponse JSON. Vous pouvez utiliser des outils de profilage de code pour vous aider à identifier les parties qui posent des problèmes de performance et essayer de les optimiser. De plus, lors de la désérialisation en JSON, assurez-vous d'utiliser un constructeur de chaîne pour construire votre chaîne finale. Si vous effectuez des opérations de concat standard, les performances en pâtiront également.
J'ai vu sur le Web plusieurs sérialiseurs JSON écrits pour C#. Certains peuvent être plus rapides que ce que vous faites, qui sait ?
Je ne suis pas sûr que cela vous aide beaucoup, mais il y a quelques informations provenant de choses que nous avons vues avec le passage de messages basés sur des chaînes.
UPDATE : Je viens de voir ça sur dotnetkicks : JSON.Net C'est une mise à jour de James pour les sérialiseurs de json.net. Peut aider.
Je sais que pour Java, il existe un grand nombre de sérialiseurs et désérialiseurs JSON open source. Nous utilisons FlexJSON .