2010-11-18 4 views
1

Je suis en train de créer un moteur de balayage Web dans .Net qui exécute environ 500 requêtes httpwebre à la fois. Tout va bien mais le problème se pose à certains moments; On dirait que le thread de récupération de place occupe toute la pause de l'application pendant quelques secondes. Y at-il de toute façon que réduire le retard généré par GC.GC suspend l'activité complète de l'application

Répondre

1

Guidance on how to avoid GC problems in .Net

Pour tirer le meilleur parti de l'allocateur vous devriez envisager des pratiques telles que les suivantes:

  • Allouer toute la mémoire (ou autant que possible) être utilisé avec une structure de données donnée en même temps.
  • Supprimer les affectations temporaires qui peuvent être évitées avec peu de pénalité en complexité.
  • Réduire au minimum le nombre de fois que les pointeurs d'objet sont écrits, en particulier ceux qui ont été créés pour des objets plus anciens.
  • Réduisez la densité des pointeurs dans vos structures de données.
  • Faire une utilisation limitée des finaliseurs, et seulement sur les objets "feuille", aussi que possible. Casser des objets si nécessaire pour aider avec ceci.

Une pratique régulière de l'examen de vos structures de données clés et la réalisation profils d'utilisation de mémoire avec des outils tels que Profiler d'allocation ira un long chemin pour garder votre utilisation de la mémoire efficace et ayant le garbage collector travail son meilleur pour toi.

Vous pouvez request a GC à un moment plus opportun qui peut réduire les pauses plus tard

Regardez aussi les questions StackOverflow liées au droit - il y en pertinents y ----->