System.OutOfMemoryException, выброшенное для большой таблицы в EF

Это может быть простой или быстро задаваемый вопрос.

В моем приложении EF возникает исключение.

System.OutOfMemoryException: возникло исключение типа «System.OutOfMemoryException».

Я пытаюсь получить записи из таблицы Журнал на основе idList (int). Таблица журналов содержит миллионы записей. Как исправить это исключение или как оптимизировать код для решения этой проблемы?

    var resultList = idList.Join(clientEntities.Logs,
                                 x => x,
                                 s => s.ID,
                                 (x, s) => s)

    foreach (var r in resultList)
    {
        ...
    }

При выполнении цикла возникло исключение.


person New Developer    schedule 05.09.2014    source источник
comment
OutOfMemory исключения чрезвычайно сложно отлаживать, особенно когда мы не можем видеть, какой другой код используется. Что происходит внутри foreach?   -  person Matthew Haugen    schedule 05.09.2014
comment
Есть ли у вас возможность использовать подкачку?   -  person Mairaj Ahmad    schedule 05.09.2014
comment
@ MatthewHaugen - это даже не вход в foreach.   -  person New Developer    schedule 05.09.2014
comment
Я думаю, что правильное предложение - использовать здесь пейджинг. Ограничьте свой запрос N (т.е. 1000) строк за вызов. Вы вызываете ToList () в конце запроса?   -  person Ivan Zub    schedule 05.09.2014
comment
не гарантирует предотвращения исключения из памяти, но повышает производительность, попробуйте clientEntities.Logs.AsNoTracking()   -  person Yuliam Chandra    schedule 05.09.2014


Ответы (1)


Я думаю, что лучший вариант для вас - использовать разбиение на страницы. Вы можете ограничить количество записей, используя разбиение на страницы.

person Mairaj Ahmad    schedule 05.09.2014