It seems you are trying to move items from HashSetto List. If this is the case, just move everything once with List.AddRangeand use HashSet.Clearto delete HashSet:
lstSortList.AddRange(hsLinks);
hsLinks.Clear();
If (as Vajura suggested), you are worried about holding 2 copies of links *, you can instead move batches instead of individual elements:
const int batchSize = 1000;
var batch = new string[batchSize];
do
{
var batchIndex = 0;
foreach (var link in hsLinks.Take(batchSize))
{
batch[batchIndex] = link;
batchIndex++;
}
if (batchIndex < batchSize)
{
batch = batch.Take(batchIndex).ToArray();
}
hsLinks.ExceptWith(batch);
lstSortList.AddRange(batch);
} while (hsLinks.Any());
.
* . 4 8 ( 32 64 ). ( .Net) , , ( ).