Bien que je comprenne les implications sérieuses de jouer avec cette fonction (ou du moins c'est ce que je pense), je ne vois pas pourquoi elle devient une de ces choses que les programmeurs respectables n'utiliseraient jamais, même ceux qui ne savent même pas à quoi elle sert.
Imaginons que je développe une application où l'utilisation de la mémoire varie énormément en fonction de ce que fait l'utilisateur. Le cycle de vie de l'application peut être divisé en deux étapes principales : l'édition et le traitement en temps réel. Au cours de l'étape d'édition, supposons que des milliards, voire des trillions d'objets sont créés ; certains sont petits et d'autres non, certains peuvent avoir des finaliseurs et d'autres non, et supposons que leur durée de vie varie de quelques millisecondes à de longues heures. Ensuite, l'utilisateur décide de passer à l'étape du temps réel. A ce stade, supposons que les performances jouent un rôle fondamental et que la moindre altération du déroulement du programme pourrait avoir des conséquences catastrophiques. La création d'objets est alors réduite au minimum grâce à l'utilisation de pools d'objets et autres, mais le GC intervient inopinément et jette tout, et quelqu'un meurt.
La question : Dans ce cas, ne serait-il pas judicieux d'appeler GC.Collect() avant d'entrer dans la deuxième étape ?
Après tout, ces deux étapes ne se chevauchent jamais dans le temps l'une par rapport à l'autre et toute l'optimisation et les statistiques que le GC aurait pu recueillir ne seraient pas d'une grande utilité ici...
Remarque : comme certains d'entre vous l'ont souligné, .NET n'est peut-être pas la meilleure plateforme pour une application de ce type, mais cela dépasse le cadre de cette question. L'intention est de clarifier si un appel à GC.Collect() peut améliorer le comportement/les performances globales d'une application ou non. Nous sommes tous d'accord pour dire que les circonstances dans lesquelles vous feriez une telle chose sont extrêmement rares, mais là encore, le GC essaie de deviner et le fait parfaitement bien la plupart du temps, mais il s'agit toujours de deviner.
Gracias.
25 votes
"La moindre altération du déroulement du programme pourrait avoir des conséquences catastrophiques... quelqu'un pourrait mourir" - êtes-vous sûr que C# .NET est suffisamment déterministe pour vos besoins ?
4 votes
Ni Windows ni .NET ne sont des plateformes en temps réel et vous ne pouvez donc pas garantir les mesures de performance, du moins pas au point de risquer des vies humaines. Je suis d'accord avec onebyone pour dire que vous exagérez ou que vous êtes négligent.
3 votes
LOL à "une de ces choses que les programmeurs respectables n'utiliseraient jamais, même ceux qui ne savent même pas à quoi ça sert" ! Les programmeurs qui utilisent des choses sans savoir pourquoi ne sont pas les plus respectables dans mon livre :)