Это похоже на известную проблему в
Неограниченные экземпляры / соединения SQLite, способствующие сбоям OOM # 22650.
Эта проблема, по-видимому, была решена в Visual Studio 2017 версии 15.5, и исправление могло быть перенесено в 15.4.
Обновление Visual Studio 2017 до последней версии должно решить проблему (если она действительно такая же).
Поскольку это не решило проблему, стоит отметить, что ошибка OutOfMemoryException не означает нехватку памяти, а скорее невозможность выделения памяти.
Я объясню ниже, почему это не одно и то же.
Поскольку Visual Studio является 32-разрядной программой, объем ее памяти ограничен 4 ГБ. Исходя из этого, он может "только" использовать около 2 ГБ для своих данных, остальное используется программным обеспечением Windows и для программ.
В этом пространстве физической памяти выделяются виртуальные адреса, поэтому некоторые адреса уже распределены, а некоторые нет.
Механизм сбора мусора невозможен, поэтому выделенный адрес остается выделенным.
Представьте, например, что из 2 ГБ, которые доступны, выделено 100 МБ, и каждый хочет выделить еще 1 ГБ. Логично, что доступной памяти гораздо больше, чем достаточно.
Однако, если 100 МБ выделены в середине пространства 2 ГБ, больше невозможно выделить 1 ГБ непрерывной памяти.
В этом случае условие OutOfMemoryException будет повышено, хотя это выглядит абсолютно невозможным.
Этот случай может возникать, когда память выделяется и освобождается таким образом, что выделенные фрагменты памяти рассеиваются по доступному адресному пространству и оставляют только "дыры", которых недостаточно для большого выделения.
Поэтому есть только две возможности:
Исправлена ошибка в Visual Studio, как, например , при попытке увеличить длину экземпляра класса StringBuilder
за то , что определяется его текущей собственности MaxCapacity
также вызывает состояние OutOfMemoryException.
Слишком много выделений сделано, поэтому даже освобожденная память слишком фрагментирована.
Кажется, ваш случай лучше подходит для второго случая, но ваши варианты решения здесь довольно ограничены.
64-разрядная версия Visual Studio могла бы решить эту проблему путем увеличения адресного пространства, но это не входит в дорожную карту Visual Studio.
Другой вариант - максимально сократить выделение памяти.
Вы можете уменьшить количество надстроек Visual Studio или попробовать разбить это огромное решение VS на более мелкие.
Или вы можете закрыть и перезапустить Visual Studio, так как некоторые выделения памяти выполняются параллельно потоками Visual Studio, так что здесь задействован случайный элемент.