/// <summary> /// Copies the entries of a cache into an array. Used for state transfer. /// </summary> /// <param name="cache">cache object</param> /// <param name="count">number of entries to return</param> /// <returns>array of cache entries</returns> public static CacheEntry[] GetCacheEntries(CacheBase cache, long count) { long index = 0; CacheEntry[] entArr = null; CacheEntry ent = null; cache.Sync.AcquireReaderLock(Timeout.Infinite); try { if (count == 0 || count > cache.Count) { count = cache.Count; } entArr = new CacheEntry[count]; IDictionaryEnumerator i = cache.GetEnumerator(); while (index < count && i.MoveNext()) { ent = i.Value as CacheEntry; entArr[index++] = ent.RoutableClone(null); } } catch (Exception e) { cache.Context.NCacheLog.Error("CacheHelper.CreateLocalEntry()", e.Message); return(null); } finally { cache.Sync.ReleaseReaderLock(); } return(entArr); }
/// <summary> /// Returns an array containing list of keys contained in the cache. Null if there are no /// keys or if timeout occurs. /// </summary> /// <param name="cache"></param> /// <param name="timeout"></param> /// <returns></returns> internal static object[] GetKeyset(CacheBase cache, int timeout) { int index = 0; object[] objects = null; cache.Sync.AcquireWriterLock(timeout); try { if (!cache.Sync.IsWriterLockHeld || cache.Count < 1) { return(objects); } objects = new object[cache.Count]; for (IEnumerator i = cache.GetEnumerator(); i.MoveNext() && index < objects.Length;) { objects[index++] = ((DictionaryEntry)i.Current).Key; } } finally { cache.Sync.ReleaseWriterLock(); } return(objects); }