Ejemplo n.º 1
0
        //  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);
            }
        }