public void FreeArena(MemoryMappedFileArena memoryMappedFileArena) { lock (_allocatedArenas) { _allocatedArenas.Remove(memoryMappedFileArena); } }
public MemoryMappedInfo(MemoryMappedFile memoryMappedFile, long offset, long size, MemoryMappedFileArena containingArena) { _memoryMappedFile = memoryMappedFile; _offset = offset; _size = size; _containingArena = containingArena; _streamCount = 0; _accessor = null; }
public MemoryMappedInfo(MemoryMappedFile memoryMappedFile, long offset, long size, MemoryMappedFileArena containingArena) { this.memoryMappedFile = memoryMappedFile; this.offset = offset; this.size = size; this.containingArena = containingArena; this.streamCount = 0; this.accessor = null; }
public MemoryMappedInfo CreateViewInfo(long size) { List <MemoryMappedFileArena> storage = null; int allocationSize; if (size <= SmallFileMaxBytes) { storage = _smallFileStorage; allocationSize = SmallFileMaxBytes; } else if (size <= MediumFileMaxBytes) { storage = _mediumFileStorage; allocationSize = MediumFileMaxBytes; } else if (size <= LargeFileMaxBytes) { storage = _largeFileStorage; allocationSize = LargeFileMaxBytes; } else if (size <= HugeFileMaxBytes) { storage = _hugeFileStorage; allocationSize = HugeFileMaxBytes; } else { // The requested size is larger than HugeFileMaxBytes, give it its own MemoryMappedFile return(new MemoryMappedInfo(MemoryMappedFile.CreateNew(CreateUniqueName(size), size), size)); } // Lock this list since we may be inserting a new element. MemoryMappedFileArena may also // add/remove items from the list. To avoid deadlocks, lock on this List<MemoryMappedFileArena> // first, then MemoryMappedFileArena.gate, and lock allocatedArenas last of all. lock (storage) { if (storage.Count == 0) { var arena = new MemoryMappedFileArena(this, storage, allocationSize); storage.Add(arena); lock (_allocatedArenas) { _allocatedArenas.Add(arena); } } return(storage[0].CreateMemoryMappedViewInfo(size)); } }
public MemoryMappedInfo CreateViewInfo(long size) { List<MemoryMappedFileArena> storage = null; int allocationSize; if (size <= SmallFileMaxBytes) { storage = _smallFileStorage; allocationSize = SmallFileMaxBytes; } else if (size <= MediumFileMaxBytes) { storage = _mediumFileStorage; allocationSize = MediumFileMaxBytes; } else if (size <= LargeFileMaxBytes) { storage = _largeFileStorage; allocationSize = LargeFileMaxBytes; } else if (size <= HugeFileMaxBytes) { storage = _hugeFileStorage; allocationSize = HugeFileMaxBytes; } else { // The requested size is larger than HugeFileMaxBytes, give it its own MemoryMappedFile return new MemoryMappedInfo(MemoryMappedFile.CreateNew(CreateUniqueName(size), size), size); } // Lock this list since we may be inserting a new element. MemoryMappedFileArena may also // add/remove items from the list. To avoid deadlocks, lock on this List<MemoryMappedFileArena> // first, then MemoryMappedFileArena.gate, and lock allocatedArenas last of all. lock (storage) { if (storage.Count == 0) { var arena = new MemoryMappedFileArena(this, storage, allocationSize); storage.Add(arena); lock (_allocatedArenas) { _allocatedArenas.Add(arena); } } return storage[0].CreateMemoryMappedViewInfo(size); } }