private void Remove(IComponent component, bool preserveSite)
{
lock (_syncObj)
{
if (component == null)
return;
ISite site = component.Site;
if (site == null || site.Container != this)
return;
if (!preserveSite)
component.Site = null;
for (int i = 0; i < _siteCount; i++)
{
if (_sites[i] == site)
{
_siteCount--;
Array.Copy(_sites, i + 1, _sites, i, _siteCount - i);
_sites[_siteCount] = null;
_components = null;
break;
}
}
}
}