private void Dispose(bool disposing) { if (_disposed) { return; } if (disposing) { // Dispose managed state if disposing is true _currentColumnNamesLookupIfKnown = null; _valuesInCurrentRowIfKnown = null; } // Free unmanaged resources - the remote Dispose call is the same as unmanaged resource because the garbage collector // has not idea how to automatically tidy it up _reader.Dispose(_readerId); // Tell the service that the current Reader is finished with _disposed = true; }