Embora eu entenda as sérias implicações de brincar com essa função (ou pelo menos é o que eu acho), não consigo ver por que ela está se tornando uma dessas coisas que programadores respeitáveis nunca usariam, mesmo aqueles que nem mesmo sabem Para que isso serve.
Digamos que eu esteja desenvolvendo um aplicativo em que o uso de memória varia extremamente, dependendo do que o usuário está fazendo. O ciclo de vida do aplicativo pode ser dividido em dois estágios principais: edição e processamento em tempo real. Durante o estágio de edição, suponha que bilhões ou mesmo trilhões de objetos sejam criados; alguns deles pequenos e outros não, alguns podem ter finalizadores e outros não, e suponha que sua vida útil varie de poucos milissegundos a longas horas. Em seguida, o usuário decide mudar para o estágio de tempo real. Nesse ponto, suponha que o desempenho desempenhe um papel fundamental e a menor alteração no fluxo do programa pode trazer consequências catastróficas. A criação de objetos é então reduzida ao mínimo possível usando pools de objetos e tal, mas então, o GC entra inesperadamente e joga tudo fora, e alguém morre.
A pergunta: neste caso, não seria sensato chamar GC.Collect () antes de entrar no segundo estágio?
Afinal, esses dois estágios nunca se sobrepõem no tempo e todas as otimizações e estatísticas que o GC poderia ter reunido seriam de pouca utilidade aqui ...
Observação: como alguns de vocês observaram, .NET pode não ser a melhor plataforma para um aplicativo como esse, mas isso está além do escopo desta pergunta. A intenção é esclarecer se uma chamada GC.Collect () pode melhorar o comportamento / desempenho geral de um aplicativo ou não. Todos concordamos que as circunstâncias sob as quais você faria tal coisa são extremamente raras, mas, novamente, o GC tenta adivinhar e faz isso perfeitamente bem na maioria das vezes, mas ainda é sobre adivinhação.
Obrigado.