2009-04-25 3 views
5

В исправлении ошибки небольшого веб-приложения ASP.NET/C#, которое я создал, я столкнулся с OutOfMemoryException.Отладка outofmemoryexception

Нет никаких советов относительно того, где искать, поскольку это ошибка времени компиляции. Как я могу диагностировать это исключение? Я предполагаю, что это именно то, где играет профилирование памяти? Какие-нибудь советы?

Благодаря

+2

Что именно вы имеете в виду, это ошибка времени компиляции? Вызывается ли компилятор OutOfMemoryException? – asgerhallas

+1

Время компиляции из памяти указывает на то, что у вас есть ДЕЙСТВИТЕЛЬНО странный исходный код. Единственный способ, с помощью которого я могу думать на C++, - это рекурсивно включать файлы (т. Е. A.h включает b.h, а b.h включает a.h) - есть ли у C# аналогичная концепция? Вы в основном должны делать что-то, что заставляет дерево разбора взорваться. –

+0

Да, сам компилятор выдает ошибку. При попытке отладки отсутствует ysod, но ошибка в окне вывода. Я думаю, что виновником является то, что у меня есть файл размером 3 МБ, который я разбираю (он имеет rss-каналы), а затем отображается в пользовательском читателе RSS-канала. Я закрыл веб-сервер dev и отсортировал его. – dotnetdev

ответ

5

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

Tess Ferrandez имеет в своем блоге excellent How-To series.

1

Там две вещи, которые я могу предложить здесь:

1) Может быть, ваша машина работает из памяти. Ознакомьтесь с некоторыми идеями на http://digioz.blogspot.com/2008/11/visual-studio-systemoutofmemory.html

2) Попробуйте выполнить компиляцию проекта за пределами визуальной студии с помощью утилиты командной строки VS и запустите msbuild «SolutionfileName.sln». Твоя ли она все еще рушится?

Надежда, что помогает :)

1

Я надеюсь, что вы имеете в виду ошибки во время выполнения, а не во время компиляции ошибка.

Обычно это происходит, если у вас есть список, который сохраняется в статическом поле или в общесистемном контейнере ASP.NET.

Вы можете запустить приложение в профайлер, как:

Red gate ants profiler

1

Извините выше, но для меня это произошло более чем в 3 раза - Редгейт сломал либо VS или все Окно ... Попробуйте это approach. Я прошу причину для вашей проблемы - слабая отладка, проверьте log4net. Кроме простой если (DebuggingFlag == верно) response.write («DebugMsg»)

может быть полезным, как просто и нелепо звучит ...