// Cycles through the table periodically and cleans up expired entries. // private static void CleanupIdentities(Object state) { // FUTURE:: come up with a better way to do this BCLDebug.Assert( Thread.GetDomain().RemotingData.IDTableLock.IsWriterLockHeld, "ID Table being cleaned up without taking a lock!"); IDictionaryEnumerator e = URITable.GetEnumerator(); ArrayList removeList = new ArrayList(); while (e.MoveNext()) { Object o = e.Value; WeakReference wr = o as WeakReference; if ((null != wr) && (null == wr.Target)) { removeList.Add(e.Key); } } foreach (String key in removeList) { URITable.Remove(key); } }
private static void CleanupIdentities(object state) { IDictionaryEnumerator enumerator = URITable.GetEnumerator(); ArrayList list = new ArrayList(); while (enumerator.MoveNext()) { WeakReference reference = enumerator.Value as WeakReference; if ((reference != null) && (reference.Target == null)) { list.Add(enumerator.Key); } } foreach (string str in list) { URITable.Remove(str); } }