У меня проблема с «утечкой памяти» в ASP.Net. Я создал пустую страницу, связанную с базой данных. Память увеличивается в момент доступа к странице и не возвращается в нормальное состояние в кратчайшие сроки! самая высокая пиковая память была между 1 Гб!, тогда мне приходится перерабатывать «пул» в IIS ... Я использую методы Connection.Close() и connection.Dispose(), но кажется, что они работают. Я искал в Интернете больше soulção не смог найти.Ошибка утечки пула приложений ASP.Net
Есть ли способ решить эту проблему, не перерабатывая пул? Спасибо за обмен знаниями !!!
Это блок, в котором происходит утечка памяти:
SqlConnection cn = new SqlConnection("");
SqlCommand cm = new SqlCommand();
SqlDataReader dr = null;
try
{
cn.Open();
cm.Connection = cn;
cm.CommandTimeout = 600;
cm.CommandText = "";
cm.Parameters.Add("operation", SqlDbType.Int).Value = 1;
cm.Parameters.Add("now", SqlDbType.DateTime).Value = DateTime.Now;
dr = cm.ExecuteReader(CommandBehavior.SingleResult);
while (dr.Read())
{
//blah blah blah...
}
dr.Close();
}
catch (Exception ex)
{
}
finally
{
if (dr != null)
dr.Dispose();
cm.Dispose();
cn.Close();
cn.Dispose();
}
Было бы намного проще в использовании, если вы завернуты ваш сп/см/дг в 'using' заявления, он делает все модные вещи, как закрытие/утилизации после исключения для вас. Кроме того, почему вы используете цикл while, если вы говорите ему, чтобы он возвращал один результат? измените 'while' на' if' ... Не то, что это ваши проблемы, но он очищает ваш код. –
моя догадка - это ваш бла-бла, бла, блавы вызывают исключение, а блок finally также вылетает, когда он пытается избавиться от незакрытого dr. оставив все объекты открытыми и un garbage собрал – Ewan
Сначала изучите модель памяти .NET, и вы не будете так удивлены. –