¿Necesito liberar el objeto COM en cada iteración 'foreach'?

Aquí está el problema (potencial):

Creo un objeto COM y luego uso un 'foreach' para recorrer cada elemento de una colección que devuelve. ¿Necesito liberar cada elemento individual que recorro en la colección? (Vea el código a continuación.) Si es así, no puedo pensar en una forma de liberarlo efectivamente desde una declaración 'finalmente', en caso de que haya un error mientras se está operando el artículo.

¿Alguna sugerencia?

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;
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta