public void Exceute() { EntityTableIndexItemBag val = null; _dic.TryGetValue(_key, out val); if (val != null) { lock (val) { if (DateTime.Now.Subtract(val.LastUsed).TotalSeconds > 30) { EntityTableIndexItemBag val0; _dic.TryRemove(_key, out val0); _isdone = true; } } } }
private EntityTableIndexItemBag LoadIndex(string tablename, string indexname, EntityTableMeta meta) { string key = string.Format("{0}##{1}", tablename, indexname); EntityTableIndexItemBag temp = null; if (indexdic.TryGetValue(key, out temp)) { temp.LastUsed = DateTime.Now; } string indexfile = GetIndexFile(tablename, indexname); var locker = GetKeyLocker(tablename, "index_" + indexname); lock (locker) { if (indexdic.TryGetValue(key, out temp)) { temp.LastUsed = DateTime.Now; } else { temp = new EntityTableIndexItemBag(); } using (ObjTextReader idxreader = ObjTextReader.CreateReader(indexfile)) { if (temp.LastOffset > 0) { idxreader.SetPostion(temp.LastOffset); } Dictionary <long, EntityTableIndexItem> al = null; foreach (var newindex in idxreader.ReadObjectsWating <EntityTableIndexItem>(1)) { temp.LastOffset = idxreader.ReadedPostion(); if (!temp.Dics.TryGetValue(newindex.Key, out al)) { al = new Dictionary <long, EntityTableIndexItem>(); temp.Dics.TryAdd(newindex.Key, al); } if (newindex.Del) { al.Remove(newindex.Offset); } else { al.Add(newindex.Offset, newindex); } } } if (temp.LastUsed == DateTime.MinValue) { temp.LastUsed = DateTime.Now; indexdic.TryAdd(key, temp); LJC.FrameWork.Comm.Coroutine.CoroutineEngine.DefaultCoroutineEngine.Dispatcher(new IndexDestroy(indexdic, key)); } else { temp.LastUsed = DateTime.Now; } } return(temp); }