public void Dispose() { // dispose queue (wait finish) if (_queue.IsValueCreated) { _queue.Value.Dispose(); } // get stream length from writer - is safe because only this instance // can change file size var delete = _logFactory.Exists() && _logPool.Writer.Length == 0; // dispose Stream pools _dataPool.Dispose(); _logPool.Dispose(); ENSURE(_dataFactory.IsLocked() == false, "datafile must be released"); ENSURE(_dataFactory.IsLocked() == false, "logfile must be released"); if (delete) { _logFactory.Delete(); } // other disposes _cache.Dispose(); }