public virtual TSet Read() { if (!_initialized) { throw new NotSupportedException("Reading from an uninitialized Session is not supported"); } if (_data != null) { return(_data); } _data = new TSet(); if (!File.Exists(_fileName)) { return(_data); } using (MemoryMappedFile memFile = MemoryMappedFile.CreateFromFile(_fileName, FileMode.Open, _mapName, 0, MemoryMappedFileAccess.Read)) using (MemoryMappedViewStream view = memFile.CreateViewStream(0, 0, MemoryMappedFileAccess.Read)) { RuntimeHelpers.PrepareConstrainedRegions(); long headerSize = Unsafe.SizeOf <Header>(); TMap map = new TMap(); byte *ptr = (byte *)0; try { view.SafeMemoryMappedViewHandle.AcquirePointer(ref ptr); byte *loc = ptr; Header info = Unsafe.Read <Header>(loc); loc += headerSize; byte[] metaBytes = new byte[info.MetaLen]; Marshal.Copy((IntPtr)loc, metaBytes, 0, info.MetaLen); loc += info.MetaLen; _data.MetaData = MetaFormatter.Deserialize <TMeta>(metaBytes); int len = Unsafe.SizeOf <TStruct>(); for (int i = 0; i < info.ItemCount; ++i) { _data.Add(map.ToData(Unsafe.Read <TStruct>(loc), _data.MetaData)); loc += len; } } finally { if (ptr != null) { view.SafeMemoryMappedViewHandle.ReleasePointer(); } } } return(_data); }