¿Cómo se cambia el tamaño de pila predeterminado para ejecutable administrado.net
Hemos descubierto que uno de nuestros ensamblados generados automáticamente está lanzando una excepción StackOverflowException en new (). Esta clase tiene (tenga paciencia conmigo, por favor) más de 400 propiedades simples que se inicializan (la mayoría por defecto (cadena), etc.) en un constructor.
Notamos que está bien en 64 bits pero en 32 bits, ¡vale!
Necesitamos probar si es razonable para nuestro caso de uso crear una pila predeterminada más grande para darnos espacio para respirar mientras rediseñamos el generador de códigos.
Nosotros esp Interesado en soluciones que impliquen app.config si es posible. Pero soy realista, así que cualquier cosa sería buena.
Razones de la pila sobre el flujo. Hemos reducido el error del constructor en cuestión. Mis primeras impresiones fueron también del tipo de recursión infinita. Sin embargo, hemos reproducido el error utilizando una aplicación de consola de 3 líneas que:
crea una instancia de clase vacía.llama a un método no estático (Clon) en la clase en el que el primer trabajo es crear y vaciar la instancia lista para pasar las propiedades.Va bang como golpea el segundo constructor.
Ahora, depurando con el código fuente .net, vemos que el desbordamiento de la pila está en Guid.NewGuid () que se pasa como el segundo parámetro al constructor. La línea de código real es la llamada a la llamada CoCreateGuid () nativa.
Entonces, aunque podría ser un error en CoCreateGuid (), queremos eliminar nuestro código del problema. Mi primer pensamiento es aumentar el tamaño de la pila de forma masiva y ver si este error vuelve a ocurrir. Entonces, ya que creo que podemos controlar todos los casos de uso, es reemplazar el constructor con la inicialización de objetos, creo que esto puede aliviar la presión sobre la pila.
Nótese bien. Podemos evitar que ocurra el error eliminando solo la propiedad int de la clase.