Мы обнаружили, что одна из наших автоматически сгенерированных сборок бросает StackOverflowException в new(). Этот класс имеет (по-моему, мне) 400+ простых свойств, которые инициализируются (большинство по умолчанию (строка) и т.д.) В конструкторе.
Мы замечаем, что его штраф на 64 бита, но на 32 бита он бьет!
Нам нужно протестировать, если разумно использовать наш случай использования, чтобы создать большой стек по умолчанию, чтобы дать нам комнату для передышки, пока мы реинжиниринг генератора кода.
Мы бы хотели. заинтересованных в решениях, которые включают app.config, если это возможно. Но я реалист, поэтому все будет хорошо.
Пояснения к стеку над потоком. Мы сузили ошибку в соответствующем конструкторе. Мои первые впечатления были также типом бесконечной рекурсии. Однако мы воспроизвели ошибку с помощью 3-строчного консольного приложения, которое:
- создает пустой экземпляр класса.
- вызывает нестатический метод (Clone) для класса, для которого первым заданием является создание и пустой экземпляр, готовый передать свойства.
Он идет, когда он попадает во второй конструктор.
теперь отлаживая исходный код .net, мы видим, что переполнение стека находится в Guid.NewGuid(), который передается в качестве второго параметра конструктору. Фактическая строка кода - это вызов собственного вызова CoCreateGuid().
Поэтому, хотя это может быть ошибка в CoCreateGuid(), мы хотим исключить наш код из проблемы. Моя первая мысль состоит в том, чтобы увеличить размер стека в массовом порядке и посмотреть, повторяется ли эта ошибка. Затем, поскольку я думаю, что мы можем контролировать все варианты использования, заменяет конструктор инициализацией объекта - думаю, это может уменьшить давление на стек.
Nb. Мы можем остановить эту ошибку, удалив только из свойства int из класса.