Я использую ASP.NET 4.0.
За последние несколько недель мало кто жалуется, что приложение начинает работать со сбоями. GridView неожиданно начинает показывать содержимое элемента управления DropDown, к которому тот же пользователь или другой параллельный пользователь могли получить доступ в любой момент времени в этот день. Аналогично, элементы управления DropDown могут заполняться RowID любого старого набора результатов вместо фактических элементов.
Мне попалась статья: Пользователи видят данные других пользователей в ASP.NET , где автор обсуждает статические объекты, ответственные за поведение утечки памяти.
Это напоминает мне класс в моем проекте, который Static
и содержит public static
методы. Этот класс содержит методы для заполнения DropDown, возврата DataSet для ввода запроса или возврата скалярного объекта на основе ввода запроса.
Ниже приведена выдержка из этого класса:
public static class reuse
{
public static void FillDropDownList(string Query, DropDownList DropDownName, string ConnectionStringParameter)
{
SqlDataReader dr;
try
{
dbConnection.OpenConnection(ConnectionStringParameter);
//Check whether the Drop Down has existing items. If YES, empty it.
if (DropDownName.Items.Count > 0)
DropDownName.Items.Clear();
SqlCommand cmd = new SqlCommand(Query,dbConnection.cn);
dr = cmd.ExecuteReader();
DropDownName.Items.Add("-- Select --");
DropDownName.Items.Add("All");
while (dr.Read())
DropDownName.Items.Add(dr[0].ToString());
dr.Close();
}
catch (Exception ex)
{
rpkCustomErrorHandler.GetScript(HttpContext.Current.Response,ex.Message.ToString());
}
dbConnection.CloseConnection();
}
}
Я хочу знать, является ли это причиной неисправности, о которой я говорил выше. Если да, есть ли способ утилизировать статические методы после завершения задачи метода. Нужно ли менять класс со статического на простой класс по умолчанию?
Отредактировано
У меня есть другой класс, который также является статическим и используется вышеуказанным классом:
public static class dbConnection
{
public static SqlConnection cn = new SqlConnection();
public static void OpenConnection()
{
try
{
cn.ConnectionString = ConfigurationManager.ConnectionStrings["cnWebTwDrill"].ToString();
if (cn.State == ConnectionState.Closed)
cn.Open();
}
catch (Exception)
{
throw;
}
}
}
Должен ли я удалить «Static» из класса подключения и сделать вызов этому классу, используя каждый раз уникальный экземпляр?