public long ShrinkMemoryPool(long size)
{
lock (m_syncRoot)
{
if (m_disposed)
throw new ObjectDisposedException(GetType().FullName);
if (CurrentCapacity <= size)
return CurrentCapacity;
for (int x = 0; x < m_memoryBlocks.Capacity; x++)
{
if (m_memoryBlocks[x] != null)
{
if (m_isPageFree.AreAllBitsCleared(x * m_pagesPerMemoryBlock, m_pagesPerMemoryBlock))
{
m_memoryBlocks[x].Dispose();
m_memoryBlocks[x] = null;
m_memoryBlockAllocations--;
if (CurrentCapacity <= size)
return CurrentCapacity;
}
}
}
return CurrentCapacity;
}
}