Вопрос

Я получил OutOfMemoryException раньше и не мог понять, для чего это было. Это не имело никакого смысла вообще. Копал в моем коде и внезапно вспомнил, что где -то забыло проверить на NULL, и в данном конкретном случае это было (и должно быть) именно это. Это не должно вызывать OutOfMemoryException По моему мнению, но я исправил это, конечно. И когда я это сделал, исключение больше не появилось!

Поэтому я снова удалил чек и изучил исключение, которое я получил еще. И оказывается, что у него было Innerexception типа NullReferenceException и стек следа, что, конечно, сделано много Больше смысла.

Но почему я получил OutOfMemoryException? Это никогда не случилось со мной раньше ... не имеет смысла для меня ...


Хотел бы дать немного больше контекста, но не могу сказать много, не загружая весь проект, который я не могу (и который вы не захотите читать в любом случае: P). Но конкретное место, которое он случился, выглядит так:

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

Исправление состояло в том, чтобы положить if(exportParameters != null) Перед блоком кода. exportParameters это List<ExportParameter>, кроме как в случае неудачного случая, в котором он был null.

Это было полезно?

Решение

Возможно, вы столкнетесь с проблемой, в которой предназначены ограниченные области выполнения, чтобы предотвратить, то есть, тот, на который опирается ваш пункт о ущербе, вызывает условие вне памяти.

(В ответ на комментарий Свиша это первая ссылка, когда мы гуглируем фразу: http://msdn.microsoft.com/en-us/library/ms228973.aspx)

Другие советы

Помимо очевидной причины для получения Oomexception, вы также можете получить его, если у вас все еще есть память, но не достаточно большой кусок для того, что запрашивается. Если вы получаете это надежно и относительно близко запуска, вы, вероятно, случайно запрашиваете больше памяти, чем намерены (т.е. запрашивая очень большой массив). Можете ли вы опубликовать немного своего кода или хотя бы описать свой шаблон распределения?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top