public IRawFile GetFile(IColumnMetadata column, int fileID, EDataType dataType, long recordHint) { var fieldName = column.FileName; var filename = fieldName + GetExtension(dataType); Thread.MemoryBarrier(); IRawFile file = _openedFiles[fileID]; if (file == null) { // Size of read chunks. Rounded to power of 2. var bitHint = GetBitHint(dataType, recordHint, column.HintDistinctCount, column.AvgSize); file = Open(filename, fileID, column.ColumnID, dataType, bitHint); var existing = Interlocked.CompareExchange(ref _openedFiles[fileID], file, null); if (existing != null) { file.Dispose(); return(existing); } } return(file); }