internal int GetFreeBlockNumber() { // get the first free block or append to the end if (_freeList.CountOnes() > 0) { int i = _freeList.GetFirst(); _freeList.Set(i, false); return(i); } else { return(Interlocked.Increment(ref _lastBlockNumber));//++; } }