Domanda

Ho ricevuto una OutOfMemoryException in precedenza e non riusciva a capire cosa fosse per. Non aveva senso. Scavato in giro nel mio codice, e improvvisamente ricordato che da qualche parte si era dimenticato di verificare la presenza di nulla, e in questo caso particolare era (e dovrebbe essere) esattamente questo. Questo non dovrebbe causare un OutOfMemoryException a mio parere, ma ho riparato anywas naturalmente. E quando l'ho fatto, l'eccezione non sembra più!

Così ho rimosso di nuovo l'assegno e studiato l'eccezione ho avuto un po '. E 'venuto fuori che aveva una InnerException di tipo NullReferenceException e una traccia dello stack che ovviamente ha reso molto più senso.

Ma perché ho ricevuto un OutOfMemoryException? Questo non è mai successo a me prima ... non ha senso per me ...


Mi piacerebbe dare un po 'di contesto, ma non si può dire molto, senza dover caricare l'intero progetto, che non può (e che non vorresti leggere comunque: p). Ma il luogo specifico E 'successo simile a questo:

            {
                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 correzione è stato quello di porre if(exportParameters != null) prima del blocco di codice. exportParameters è un List<ExportParameter>, salvo il caso in mancanza in cui è stato null.

È stato utile?

Soluzione

Si potrebbe affrontare il problema che Constrained Regioni di esecuzione sono progettati per impedire -. Cioè la JITting di un codice che il vostro clausola catch si affida sta causando la condizione di memoria

(In risposta al commento di Svish, questo è il primo collegamento quando googling la frase: http://msdn.microsoft.com/en-us/library/ms228973.aspx )

Altri suggerimenti

A parte l'ovvia ragione per ottenere un OOMException, è anche possibile ottenere se si ha ancora memoria disponibile, non solo una abbastanza grande fetta di ciò che viene richiesto. Se stai ricevendo in modo affidabile e relativamente vicino avvio, probabilmente stai chiedendo accidentalmente più memoria di quanto si intende (es. Richiesta di un Very Large Array). Puoi pubblicare un po 'di codice o almeno descrivere il tuo modello di allocazione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top