private static void _pruneCachedSwitches()
{
lock (s_switches)
{
if (s_LastCollectionCount != GC.CollectionCount(2))
{
List<WeakReference> buffer = new List<WeakReference>(s_switches.Count);
for (int i = 0; i < s_switches.Count; i++)
{
Switch s = ((Switch)s_switches[i].Target);
if (s != null)
{
buffer.Add(s_switches[i]);
}
}
if (buffer.Count < s_switches.Count)
{
s_switches.Clear();
s_switches.AddRange(buffer);
s_switches.TrimExcess();
}
s_LastCollectionCount = GC.CollectionCount(2);
}
}
}