Я подозреваю, что проблема в том, что Entity Framework пытается кэшировать / отслеживать все эти данные в контексте вашего объекта, что в конечном итоге вызывает исключение OutOfMemory, если набор данных огромен.
Вы можете отключить отслеживание вручнуючтобы избежать этого:
dataContext.Messages.MergeOption = System.Data.Objects.MergeOption.NoTracking;
Распределенная память, которую вы видите в данный момент, находится внутри контекста данных - эта память со временем будет собирать мусор после удаления контекста, так что в качестве альтернативы вы можете материализовать меньшие партии строк внутри.использование блока или избавиться от контекста объекта вручную, чтобы восстановить память между каждым пакетом.