Aunque entiendo las serias implicaciones de jugar con esta función (o al menos eso es lo que creo), no veo por qué se está convirtiendo en una de estas cosas que los programadores respetables nunca usarían, incluso aquellos que ni siquiera saben para qué sirve.
Digamos que estoy desarrollando una aplicación en la que el uso de la memoria varía enormemente según lo que esté haciendo el usuario. El ciclo de vida de la aplicación se puede dividir en dos etapas principales: edición y procesamiento en tiempo real. Durante la etapa de edición, suponga que se crean miles de millones o incluso billones de objetos; algunos de ellos pequeños y otros no, algunos pueden tener finalizadores y otros no, y suponen que su vida útil varía desde unos pocos milisegundos hasta largas horas. A continuación, el usuario decide cambiar a la etapa de tiempo real. En este punto, suponga que el desempeño juega un papel fundamental y la más mínima alteración en el flujo del programa podría traer consecuencias catastróficas. La creación de objetos se reduce al mínimo posible mediante el uso de grupos de objetos y todo eso, pero luego, el GC interviene inesperadamente y lo tira todo, y alguien muere.
La pregunta: En este caso, ¿no sería prudente llamar a GC.Collect () antes de ingresar a la segunda etapa?
Después de todo, estas dos etapas nunca se superponen en el tiempo entre sí y toda la optimización y las estadísticas que el GC podría haber recopilado serían de poca utilidad aquí ...
Nota: Como algunos de ustedes han señalado, .NET podría no ser la mejor plataforma para una aplicación como esta, pero eso está más allá del alcance de esta pregunta. La intención es aclarar si una llamada GC.Collect () puede mejorar el comportamiento / rendimiento general de una aplicación o no. Todos estamos de acuerdo en que las circunstancias bajo las cuales harías tal cosa son extremadamente raras pero, de nuevo, el GC intenta adivinar y lo hace perfectamente bien la mayor parte del tiempo, pero aún se trata de adivinar.
Gracias.