2009-12-01 3 views
2

Si un objet est stocké en mémoire et que je quitte mon application pendant une heure, l'objet sera-t-il toujours là à mon retour? En d'autres termes, le ramasse-miettes .NET jettera-t-il mon objet parce qu'il n'a pas été utilisé pendant un certain temps?Est-ce que mon objet sera toujours "là"?

+2

Il ne sera pas jeté mais il peut être paginé sur le disque par l'OS – Greg

+3

J'écris toujours/* NE PAS EFFACER */à côté de variables vraiment importantes, juste au cas où. –

Répondre

11

Le garbage collector ne collecte que les objets qui ne sont plus référencés dans votre application. Le ramasse-miettes jamais collecter tous les objets qui sont utilisés.

La définition de «utilisé» utilisée par le ramasse-miettes est basée sur les racines. Une instance d'objet a des racines si d'autres instances d'objet dans AppDomain le référencent. Tant que l'AppDomain qui héberge votre application n'est pas déchargé, toutes les instances d'objet qui étaient en mémoire resteront en mémoire tant qu'elles conserveront des racines dans l'application.

4

Tant qu'il y a quelque chose référençant votre objet, il ne sera pas collecté par le garbage collector. Ainsi, si vous créez un champ statique dans une classe et que vous l'affectez avec une référence à votre objet, il restera en mémoire tant qu'il n'y a pas d'autre affectation dans le champ, et tant que le domaine AppDomain est chargé (ce qui est typiquement tant que le processus est en cours).

3

+1 pour la réponse de @ Andrew - pour l'instant - la mémoire de votre application peut être envoyée dans la mémoire virtuelle (sur la DISQUE) donc quand vous accédez à l'objet, il faudra un peu de temps pour l'obtenir. finalement.

Questions connexes