internal void AddPointer(IXmlDataVirtualNode pointer)
{
Debug.Assert(_pointers.ContainsValue(pointer) == false);
lock (_pointers)
{
_countAddPointer++;
if (_countAddPointer >= 5)
{ // 5 is choosed to be small enough to not affect perf, but high enough so we will not scan all the time
ArrayList al = new ArrayList();
foreach (DictionaryEntry entry in _pointers)
{
IXmlDataVirtualNode temp = (IXmlDataVirtualNode)(entry.Value);
Debug.Assert(temp != null);
if (!temp.IsInUse())
al.Add(temp);
}
for (int i = 0; i < al.Count; i++)
{
_pointers.Remove(al[i]);
}
_countAddPointer = 0;
}
_pointers[pointer] = pointer;
}
}