L'interviewer m'a posé la question aujourd'hui... y a-t-il une réponse ?
Pourquoi n'est-il pas recommandé ?
L'interviewer m'a posé la question aujourd'hui... y a-t-il une réponse ?
System.GC.Collect()
force le collecteur d'ordures à fonctionner. Ceci n'est pas recommandé mais peut être utilisé si la situation se présente.
GC.Collect() est coûteux à exécuter. Il est déconseillé de le faire plus que nécessaire. Le code pour savoir quand il doit être appelé est bien écrit. Normalement, vous ne devriez faire une collecte automatique que dans des cas limites spécialisés. stackoverflow.com/a/21961777/2710988
WaitForPendingFinalizers
n'offre pas nécessairement de "meilleures performances" : il bloque simplement jusqu'à ce que tous les objets de la file d'attente de finalisation aient été finalisés (objets qui auraient pu être placés là par votre appel précédent à la fonction Collect
). Si vous voulez que ces objets aient une chance d'être collectés, vous devez un autre Appel à Collect
après en appelant WaitForPendingFinalizers
.
Puisque l'une des rares bonnes raisons d'appeler gc.Collect est un ultime effort pour libérer les ressources qui n'ont pas été correctement éliminées, WaitForPendingFinalizers semble être une étape nécessaire. Je ne suis pas sûr de la meilleure pratique à adopter pour éviter d'appeler gc.Collect de manière excessive dans de tels cas, cependant. BTW, je me demande s'il y a une raison technique pour laquelle gc.Collect "doit" promouvoir les générations ? Il semblerait plus utile que les générations restent en place à moins que suffisamment de choses aient été allouées dans l'une d'elles pour justifier son avancement.
Note pour les débutants en C# (comme moi) : Le GC force call ne garantit pas qu'un objet concret inutilisé soit retiré de la mémoire. (une façon de le faire est d'utiliser la "déclaration d'utilisation" ( msdn.microsoft.com/ru-ru/library/yh598w02(v=vs.80).aspx ))
GC.Collect()
de MDSN ,
Utilisez cette méthode pour essayer de récupérer toute mémoire qui est inaccessible.
Tous les objets, quelle que soit leur durée ils ont été en mémoire, sont considérés pour la collecte ; cependant les objets qui sont référencés dans du code ne sont pas collectés. Utilisez cette méthode pour forcer le système à essayer de de récupérer la quantité maximale de mémoire disponible.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
6 votes
Cette question contient de bonnes informations sur les raisons pour lesquelles vous ne devriez pas le faire : stackoverflow.com/questions/118633/
1 votes
Pourquoi tu dis ça comme ça
0 votes
La partie "Comment" est bien moins importante que la partie "Pourquoi" (ne pas) la remettre en question.
2 votes
@Jason - Peut-être que l'intervieweur ne voulait pas entendre la solution, mais plutôt connaître les connaissances d'Andrew et les raisons qui l'empêchent de le faire, alors cette question pourrait effectivement avoir un sens.
3 votes
@martinstoeckli C'est toujours une question terrible. Dans un entretien stressant, une personne ayant les connaissances requises ne se rendra pas compte qu'il s'agit d'une question piège, ou ne pensera pas à fournir des informations supplémentaires. La question n'aide donc pas l'examinateur à faire la distinction entre une personne ayant les connaissances et une autre qui ne les a pas. La question est donc toujours aussi mauvaise.
1 votes
Voir aussi stackoverflow.com/questions/478167/
7 votes
"Quand forcez-vous le garbage collection ?" me semble être une bonne question d'entretien ("Comment" : pas vraiment). Débutant : Je ne sais pas. Intermédiaire : Jamais. Expert : Quand vous écrivez un test pour les fuites de mémoire.