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à"?
Répondre
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.
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).
+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.
- 1. Quel objet sera collecté?
- 2. Un destructeur de base sera-t-il toujours appelé lorsqu'un objet dérivé est supprimé?
- 3. ImageView objet toujours nul
- 4. Javascript: savoir quand un objet sera garbaged
- 5. AccExplorer ne trouve pas de nouveaux contrôles/pense que les anciens contrôles sont toujours là
- 6. JScrollPane efface toujours mon Panel
- 7. Mon IsConnected retourne toujours vrai
- 8. Rails: l'objet # id sera obsolète; Objet # utilisation OBJECT_ID
- 9. sera la mémoire de réserve du compilateur pour cet objet?
- 10. Mon application sera-t-elle disponible dans le monde entier ou uniquement dans mon pays?
- 11. Qu'est-ce que cet assemblage et pourquoi est-il là?
- 12. Obtention du nom d'attribut que l'objet créé sera donné
- 13. est là plus de bibliothèque que HtmlUnit qui supporte javascript
- 14. Pourquoi toujours UpperCase dans mon code?
- 15. Mon objet sera-t-il mis à jour de la façon dont je pense qu'il sera mis à jour en utilisant cette méthode (C#)?
- 16. objet -> TreeView -> objet sélectionné dans mon objet
- 17. Pourquoi Eclipse n'installe-t-il pas toujours mon fichier APK?
- 18. Pourquoi SharpSVN SvnClient.Export (...) ne trouve pas toujours les fichiers qui devraient être là?
- 19. Est-ce que changer le type de données d'une colonne après que les données sont déjà là détruit les données?
- 20. Mon fichier -tpl ne sera pas mis à jour!
- 21. Est-ce que fb_sig_friends n'est pas censé être là?
- 22. objet ne mourra pas (toujours des références à ce que je ne trouve pas)
- 23. Pourquoi la première requête que je fais avec un objet WebClient prend-elle toujours 15 secondes?
- 24. est là de toute façon pour fournir un fichier Calendrier ics qui sera automatiquement synchronisé avec les mises à jour
- 25. Est-ce que lancer un objet en C# retourne toujours une référence à l'objet initial?
- 26. Pourquoi mon nouvel objet() NULL?
- 27. iphone - Que se passe-t-il si je libère un objet alors que l'objet exécute toujours l'une de ses méthodes?
- 28. Est-ce que jQuery ou Prototype sera meilleur?
- 29. Quelle classe sera instanciée
- 30. cvs, "le fichier doit être supprimé et est toujours là (ou de retour)"
Il ne sera pas jeté mais il peut être paginé sur le disque par l'OS – Greg
J'écris toujours/* NE PAS EFFACER */à côté de variables vraiment importantes, juste au cas où. –