Preciso liberar o objeto COM em cada iteração 'foreach'?

Aqui está o problema (potencial):

Crio um objeto COM e, em seguida, uso um 'foreach' para percorrer cada elemento de uma coleção que ele retorna. Preciso liberar cada elemento individual no qual itero na coleção? (Consulte o código abaixo.) Nesse caso, não consigo pensar em uma maneira de liberá-lo efetivamente de dentro de uma declaração 'finalmente', apenas no caso de haver um erro enquanto o item está sendo operado.

Alguma sugestão?

private static void doStuff()
{
    ComObjectClass manager = null;

    try
    {
        manager = new ComObjectClass();
        foreach (ComObject item in manager.GetCollectionOfItems())
        {
            Log.Debug(item.Name);
            releaseComObject(item); // <-- Do I need this line?
                                    //     It isn't in a 'finally' block...
                                    //             ...Possible memory leak?
        }
    }
    catch (Exception) { }
    finally
    {
        releaseComObject(manager);
    }
}

private static void releaseComObject(object instance)
{
    if (instance != null)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(instance);
        }
        catch
        {
            /* log potential memory leak */
            Log.Debug("Potential memory leak: Unable to release COM object.");
        }
        finally
        {
            instance = null;
        }
    }
}

questionAnswers(1)

yourAnswerToTheQuestion