Consider the following method:
DoTimeIntensiveOperation()
{
    var t = new Stopwatch();
    foreach(var element in a_very_long_array)
    {
        DoATimeConsumingTask(element);
    }
    Console.WriteLine("Took me " + t.Elapsed);
    return;
}
Do I need to call t.Stop() before returning?
As far as I know, the garbage collector will destroy anything that doesn't have a reference chain going back to the main method. The only reference to the created Stopwatch is t, so when DoTimeIntensiveOperation, t will be freed and the Stopwatch should be eligible for destruction. But does the fact that it's still "ticking" interfere with the GC?