2010-12-02 6 views
2

Par exemple, si vous chargez un xml et l'utiliser pour une raison quelconque:Libérer de la mémoire à partir de xml chargé?

XDocument doc = XDocument.Load("my.xml"); 

Maintenant que vous avez fini de l'utiliser et que vous voulez libérer la mémoire utilisée par celle-ci, initally J'pensais que la mise à null serait faire le travail mais ce n'est pas le cas, alors quelle est la bonne façon de libérer la mémoire utilisée si c'est possible?

Répondre

3

Vous faites la bonne chose. Laissez le GC s'inquiéter quand il recueille comme il le fera quand il y a de la pression.

+0

Ce que je voulais savoir est s'il est possible de le forcer à en disposer ou aussi bien quelque chose. – Prix

+1

Je comprends, mais vous ne voulez vraiment pas jouer avec ça. Laissez GC faire son travail - vous ne serez pas déçu :) Si my.xml est juste trop grand, vous pouvez peut-être étudier d'autres mécanismes pour le lire et le traiter, ce qui n'implique pas de lire le tout en même temps. – n8wrl

+0

Le GC doit nettoyer lorsqu'il décide qu'il est préférable de nettoyer. Assurez-vous de ne pas conserver une référence au document ailleurs. – Robaticus

2

La bonne façon est d'arrêter simple à l'aide doc. Le garbage collector va nettoyer la mémoire la prochaine fois qu'il est appelé et détermine que doc n'est plus référencé par votre code.

Si doc est un local, le JIT déterminera le dernier point utilisé et le rendra éligible pour la collecte à ce stade. Il n'y a pas besoin de null. Raymond Chen a un excellent article de blog expliquant comment cela fonctionne

+0

Merci pour la réponse ce que je voulais vraiment savoir s'il y a un moyen de s'en débarrasser dès que je l'utilise. Parce que la quantité de données en cours d'analyse et la quantité de mémoire utilisée et non libérée devient un problème. Lorsque l'application est fermée, elle est entièrement libérée et je n'utilise pas doc pour tous les fichiers qu'ils ont un nom différent pour les clients ou les produits par exemple. – Prix

+2

@Prix non il n'y en a pas. Si vous observez une croissance incontrôlable de la mémoire dans votre application, il y a une fuite de mémoire quelque part. Vous devrez joindre un profileur pour savoir ce qui fuit. – JaredPar

+0

merci, il ne se développe que quand un nouveau xml est chargé et même pensé j'utilise différents noms qu'il nevers libère la mémoire jusqu'à ce que je quitte le programme. – Prix

Questions connexes