/// <summary> /// Load store state and data from persistent medium. /// </summary> void IPersistentCacheStorage.LoadStorageState() { try { lock (_itemDict.SyncRoot) { _itemDict.Clear(); for (IEnumerator i = _internalStore.GetEnumerator(); i.MoveNext();) { MemArena arena = (MemArena)i.Current; if (!arena.IsFree) { byte[] data = arena.GetMemContents(); StoreItem item = StoreItem.FromBinary(data, CacheContext); _itemDict.Add(item.Key, new MmfObjectPtr(arena.View, arena)); } } } } catch (Exception e) { Trace.error("MmfStorageProvider.IPersistentCacheStorage()", e.ToString()); } }
public static MemArena Create() { var arena = new MemArena(); arena.arenas = PtrBuffer.Create(); arena.ptr = (byte *)Marshal.AllocHGlobal(ARENA_BLOCK_SIZE); assert(arena.ptr == ALIGN_DOWN_PTR(arena.ptr, ARENA_ALIGNMENT)); arena.end = arena.ptr + ARENA_BLOCK_SIZE; arena.arenas->Add(arena.ptr); return(arena); }
public void SetMemArena(object key, MemArena arenaTmp) { _itemDict[key] = arenaTmp; }
public MmfObjectPtr(View v, MemArena block) { View = v; Arena = block; }