You should use using() or a finally clause on everything you instantiate that has a Close or Dispose method.
This usually doesn't indicate memory leak, it indicates that unmanaged resources are still open.
It's the job of class designers to release unmanaged resources in both the Dispose/Close and Finalize methods. Generally, if you Close/Dispose something explicitly you can suppress the finalizer from being called by the GC:
Private m_finalized As Boolean = False
Protected Overrides Sub Finalize()
Dispose()
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
If Not m_finalized Then
If m_web IsNot Nothing Then
m_web.Dispose()
End If
m_finalized = True
GC.SuppressFinalize(Me)
End If
End Sub