OutOfMemoryException — это приложение ASP.Net.

Я получаю исключения OOM в приложении ASP.Net и обнаружил, что это, вероятно, вызвано тяжелыми строковыми операциями, такими как s1 = s1.Replace() и s1 = s1.SubString(), в то время, когда выдаются исключения.

Можно ли получить исключения OOM только из этих операций, если они выполняются последовательно? Количество запросов невелико, но возможно ли, что GC не освобождает память вовремя, прежде чем будет сделано новое выделение в куче?

Другими словами: может ли следующий код давать исключения OOM или сборщик мусора выпустит большое количество строк без ссылок, прежде чем мы доберемся до исключения OOM?

string s = "hello world";
while (true)
{
  s = s.Replace("h", "h");
}

person Jeeji    schedule 26.04.2011    source источник


Ответы (1)


На самом деле это не ответ на ваш вопрос, а скорее предложение о том, где искать, если вы хотите отладить сложные проблемы с памятью.

Я нашел Тесс Феррандес бесценный источник информации об ошибках, которые трудно устранить. Она использует Windbg, который имеет довольно крутую кривую обучения, но он позволит вам понять, что занимает память и почему.

Я предлагаю начать с ее labs, если вы заинтересованы в отладке этого, или, возможно, исследование памяти ASP.Net может указать вам правильный курс

person Russell Troywest    schedule 26.04.2011