Pergunta

Eu tenho um OutOfMemoryException mais cedo e não conseguia descobrir para que era. Isso não faz nenhum sentido. Cavou -se no meu código e de repente lembrou -se de que em algum lugar se esqueceu de verificar se há NULL, e nesse caso em particular era (e deveria ser) exatamente isso. Isso não deve causar um OutOfMemoryException Na minha opinião, mas eu consertei de qualquer maneira, é claro. E quando eu fiz, a exceção não parecia mais!

Então, removi o cheque novamente e estudei a exceção que recebi um pouco mais. E acontece que tinha um Innerexception do tipo NullReferenceException e um rastreamento de pilha que obviamente fez muito mais sentido.

Mas por que eu consegui um OutOfMemoryException? Isso nunca me aconteceu antes ... não faz sentido para mim ...


Adoraria dar um pouco mais de contexto, mas não posso dizer muito sem ter que fazer upload de todo o projeto, o que eu não posso (e que você não gostaria de ler de qualquer maneira: P). Mas o lugar específico que acontece se parece com o seguinte:

            {
                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++; });
            }

A correção era colocar um if(exportParameters != null) antes do bloco de código. exportParameters é um List<ExportParameter>, exceto no caso de falha em que foi null.

Foi útil?

Solução

Você pode estar enfrentando o problema que as regiões de execução restringidas são projetadas para prevenir - ou seja, o juiz de algum código em que sua cláusula de captura depende está causando a condição fora da memória.

(Em resposta ao comentário de Svish, este é o primeiro link ao pesquisar no Google a frase: http://msdn.microsoft.com/en-us/library/ms228973.aspx)

Outras dicas

Além do motivo óbvio para obter uma oomexception, você também pode obtê -lo se ainda tiver memória disponível, mas não um pedaço grande o suficiente para o que está sendo solicitado. Se você está obtendo isso de maneira confiável e relativamente próxima, provavelmente está acidentalmente solicitando mais memória do que pretende (ou seja, solicitar uma matriz muito grande). Você pode postar um pouco do seu código ou pelo menos descrever seu padrão de alocação?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top