private bool disposedValue = false; // To detect redundant calls private void Dispose(bool disposing) { if (!disposedValue) { if (Runtime.Py_IsInitialized() == 0) { throw new InvalidOperationException("Python runtime must be initialized"); } // this also decrements ref count for _view->obj Runtime.PyBuffer_Release(ref _view); _exporter = null; Shape = null; Strides = null; SubOffsets = null; disposedValue = true; } }