Pregunta

tengo un OutOfMemoryException Anteriormente y no pude entender para qué era. No tuvo ningún sentido. Cavé en mi código, y de repente recordó que en algún lugar se había olvidado de verificar si hay nulo, y en este caso particular fue (y debería ser) exactamente eso. Eso no debería causar un OutOfMemoryException En mi opinión, pero lo arreglé, por supuesto. Y cuando lo hice, ¡la excepción ya no apareció!

Así que retiré el cheque nuevamente y estudié la excepción que obtuve un poco más. Y resulta que tenía un Innerexcepción del tipo NullReferenceException y un rastro de pila que por supuesto hizo mucho mas sentido.

Pero, ¿por qué obtuve un OutOfMemoryException? Esto nunca me ha pasado antes ... no tiene sentido para mí ...


Me encantaría dar más contexto, pero realmente no puedo decir mucho sin tener que cargar todo el proyecto, que no puedo (y que no querrías leer de todos modos: P). Pero el lugar específico que sucedió se ve así:

            {
                foreach (var exportParameter in exportParameters)
                {
                    // Copy to local
                    var ep = exportParameter;

                    // Load stored values from db
                    ...
                }

                int i = 1;
                exportParameters
                    .OrderBy(ø => ø.Sequence)
                    .ForEach(ø => { if (!ø.Locked) ø.Sequence = i++; });
            }

La solución fue poner un if(exportParameters != null) antes del bloque de código. exportParameters es un List<ExportParameter>, excepto en el caso fallido en el que fue null.

¿Fue útil?

Solución

Es posible que se enfrente al problema en el que las regiones de ejecución restringidas están diseñadas para prevenir, es decir, el inicio de algún código en el que se basa su cláusula de captura está causando la condición fuera de memoria.

(En respuesta al comentario de Svish, este es el primer enlace al buscar en Google la frase: http://msdn.microsoft.com/en-us/library/ms228973.aspx)

Otros consejos

Además de la razón obvia para obtener una Oomexception, también puede obtenerla si todavía tiene memoria disponible, pero no es una fragmentación lo suficientemente grande para lo que se solicita. Si lo está recibiendo de manera confiable y relativamente cerca de la inicio, probablemente esté solicitando más accidentalmente más memoria de la que tiene la intención de (es decir, solicitar una matriz muy grande). ¿Puede publicar un poco de su código o al menos describir su patrón de asignación?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top