C# is managed code where there is garbage collector responsible for memory management implicitly. Then, why we've IDisposable interface and using statement. Technically, I know use of using statement, but wonder why duplicate stuff when GC is already there?