Example #1
0
        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);
        }