Поскольку я новичок в linq, я хотел бы спросить, правильно ли я понимаю следующее пример.
Предположим, у меня очень большая коллекция имён животных (100k записей), I ' Я хотел бы заполнить их и обработать отфильтрованные элементы очень трудоемким методом (2 недели). Методы RunWithLinq ()
и RunWithoutLinq ()
делают то же самое.
Верно ли, что при использовании первого метода исходная (большая) коллекция останется в памяти после выхода из метода и не будет затронута GC
, тогда как при использовании метода без linq коллекция будет быть удаленным с помощью GC
?
Я был бы признателен за объяснение.
class AnimalProcessor
{
private IEnumerable<string> animalsToProcess;
internal AnimalProcessor(IEnumerable<string> animalsToProcess)
{
this.animalsToProcess = animalsToProcess;
}
internal void Start()
{
//do sth for 2 weeks with the collection
}
}
class Program
{
static void RunWithLinq()
{
var animals = new string[] { "cow", "rabbit", "newt", "ram" };
var filtered = from animal in animals
where animal.StartsWith("ra")
select animal;
AnimalProcessor ap = new AnimalProcessor(filtered);
ap.Start();
}
static void RunWithoutLinq()
{
var animals = new string[] { "cow", "rabbit", "newt", "ram" };
var filtered = new List<string>();
foreach (string animal in animals)
if(animal.StartsWith("ra")) filtered.Add(animal);
AnimalProcessor ap = new AnimalProcessor(filtered);
ap.Start();
}
}