private void Dispose(bool disposing) { if (disposing && this.disposed) { throw new ObjectDisposedException(this.GetType().ToString()); } this.disposed = true; if (this.pendingDataStream != null) { this.pendingDataStream.Dispose(); this.pendingDataStream = null; } foreach (var pair in this.unmergedData) { pair.Dispose(); } this.unmergedData.Clear(); if (this.mergedData != null) { this.mergedData.Dispose(); this.mergedData = null; } }
private void SealWriteBuffer(QueryableSingleValueData newData) { var currentData = this.pendingDataStream; this.pendingDataStream = newData; if (currentData != null) { currentData.Data.Seal(); this.AddData(currentData); } }
private void AddValue(uint *key, long value) { // If the single value buffer is either not there or full swap it for a new one. if (this.pendingDataStream == null || !this.pendingDataStream.Data.TryWrite(key, value)) { lock (this) { if (this.pendingDataStream == null || !this.pendingDataStream.Data.TryWrite(key, value)) { var newData = new QueryableSingleValueData(this.memoryStreamManager.GetStream("WriteBuffer"), this.DimensionSet, true); if (!newData.Data.TryWrite(key, value)) { throw new InvalidOperationException("Unable to write data??"); } this.SealWriteBuffer(newData); } } } }