title: Is correct to use GC.Collect(); GC.WaitForPendingFinalizers();?
body: <p>I've started to review some code in a project and found something like this:</p>
  
  <pre><code>GC.Collect();
  GC.WaitForPendingFinalizers();
  </code></pre>
  
  <p>Those lines usually appear on methods that are conceived to destruct the object under the rationale of increase efficiency. I've made this remarks:</p>
  
  <ol>
  <li>To call garbage collection explicitly on the destruction of every object decreases performance because doing so does not take into account if it is absolutely necessary for CLR performance.</li>
  <li>Calling those instructions in that order causes every object to be destroyed only if other objects are being finalized. Therefore, an object that could be destroyed independently has to wait for another object's destruction without a real necessity.</li>
  <li>It can generate a deadlock (see: <a href="https://stackoverflow.com/questions/4386585/can-you-deadlock-on-calling-gc-collect-and-gc-waitforpendingfinalizers">this question</a>)</li>
  </ol>
  
  <p>Are 1, 2 and 3 true? Can you give some reference supporting your answers?  </p>
  
  <p>Although I'm almost sure about my remarks, I need to be clear in my arguments in order to explain to my team why is this a problem. That's the reason I'm asking for confirmation and reference.</p>