#out-of-memory
#не хватает памяти
Вопрос:
Я получаю исключения ООМ в ASP.Net application и обнаружили, что это, вероятно, вызвано тяжелыми строковыми операциями, такими как s1 = s1.Replace()
и s1 = s1.SubString()
, в то время, когда генерируются исключения.
Возможно ли получить исключения ООМ только из этих операций, если они выполняются последовательно? Количество запросов невелико, но возможно ли, что GC не освобождает память вовремя до того, как будет произведено новое выделение в куче?
Другими словами: может ли следующий код выдавать исключения ООМ или GC выпустит большое количество строк без ссылок, прежде чем мы доберемся до исключения ООМ?
string s = "hello world";
while (true)
{
s = s.Replace("h", "h");
}
Ответ №1:
На самом деле это не ответ на ваш вопрос, скорее предложение о том, где искать, если вы хотите устранить сложные проблемы с памятью.
Я нашел Тесс Феррандез бесценным источником информации об этих труднодоступных ошибках. Она использует Windbg, у которого довольно крутая кривая обучения, но это позволит вам разобраться, что занимает память и почему.
Я бы посоветовал начать с ее labs, если вы заинтересованы в отладке этого, или, может быть, ASP.Net исследование памяти post может направить вас на правильный курс