Вопрос памяти Linq

Поскольку я новичок в 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();
    }
}
8
задан nan 29 November 2010 в 15:03
поделиться