У меня похожая ситуация с почти таким же кодом, за исключением того, что мой контекст - это контекст Entity Framework, а данные поступают из базы данных. Похоже, что это «всплеск использования памяти», а не постоянная «утечка», поскольку общее потребление памяти процессом в конечном итоге возвращается к разумному нормальному уровню. Это все еще не очень хорошая вещь.
Похоже, что он загружает в память все данные столбца, включая данные большого двоичного столбца в моем случае. Данные сохраняются до тех пор, пока «область» не заканчивается (например, содержимое выходит за пределы области). Во время зацикливания некоторые данные выживают при сборе мусора и переходят в следующее поколение, что приводит к увеличению срока хранения (в моем случае память освобождается примерно через 10 минут).
Я пробовал разные вещи, но я думаю, что это просто поведение, которое мы должны принять.
В моем конкретном случае я использовал двоичную сериализацию для сохранения состояния объекта в базе данных. Я еще не исправил это, но мой обходной путь для уменьшения всплеска использования памяти состоял бы в том, чтобы реорганизовать код, чтобы я не использовал двоичную сериализацию, а скорее сохранял примитивные данные в столбцах таблицы базы данных, и просто назначал значения объектам в кодах. Следующим уровнем исправления будет использование «отложенной инициализации», затем кэширования и т. Д.
В вашей карте сайта, возможно, вы можете "сегментировать" вид и загрузить только подмножество узлов.