title: Do I need to release the COM object on every 'foreach' iteration?
body: <p>Here's the (potential) problem:</p>
  
  <p>I create a COM object, and then use a 'foreach' to iterate through each element in a collection it returns.  Do I need to release each individual element I iterate through in the collection?  (See code below.)  If so, I can't think of a way to effectively to release it from within a 'finally' statement, just in case there is an error as the item is being operated upon.</p>
  
  <p>Any suggestions?</p>
  
  <pre><code>private static void doStuff()
  {
      ComObjectClass manager = null;
  
      try
      {
          manager = new ComObjectClass();
          foreach (ComObject item in manager.GetCollectionOfItems())
          {
              Log.Debug(item.Name);
              releaseComObject(item); // &lt;-- 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;
          }
      }
  }
  </code></pre>