J'ai un petit service WCF qui est exécuté sur une boîte XP avec 256 Mo de RAM fonctionnant dans VM.aspnet_wp conserve le recyclage en raison de sa forte consommation de mémoire. Comment puis-je le réparer?
Quand je fais une demande (avec une taille de demande d'environ 5mbs) à ce service, je reçois toujours le message suivant dans le journal des événements:
aspnet_wp.exe a été recyclé, car la consommation de mémoire dépassait les 153 Mo (60 pour cent de la RAM disponible).
et l'appel échoue avec l'erreur 500.
J'ai essayé d'augmenter la limite de mémoire à 95%, mais il faut encore toute la mémoire et ne parvient de la même manière disponible.
Il semble que quelque chose ne va pas avec mon application (je ne réutilise pas les tampons byte [] et peut-être quelque chose d'autre) mais je ne peux pas trouver la cause de cette surutilisation de la mémoire. Le profilage a montré que tous les objets CLR que j'ai en mémoire ne prennent pas beaucoup d'espace.
Faire une analyse de vidage avec windbg a montré la même situation - rien de si grand dans le tas d'objets.
Comment puis-je savoir ce qui contribue à une telle surutilisation de la mémoire?
Y a-t-il un moyen de faire un vidage juste avant que le processus ne soit recyclé (pendant l'utilisation de la mémoire de pointe)?
J'ai beaucoup appris en utilisant les soluces de Tess et les outils de débogage. Ça vaut vraiment le coup. –
Merci. Je n'ai pas vraiment résolu celui-ci car on m'a dit que nous n'aurions pas de telles machines en production et que la mémoire ne semble pas couler. Quoi qu'il en soit, j'ai implémenté mon propre MultiBufferMemoryStream qui implémente IXmlSerializable: D –