我正在使用ASP.NET 4.0。如何通過配置靜態方法來防止故障(內存泄漏)?
從過去幾周來,很少有用戶抱怨應用程序開始出現故障。 GridView突然開始顯示同一用戶或另一個併發用戶在當天的任何時間點可能訪問的DropDown控件的內容。同樣,DropDown控件可能會被任何舊結果集的RowID填充,而不是實際的項目。
我遇到了一篇文章:Users seeing other users data in 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();
}
}
我想知道這是否是我上面所討論的故障原因。如果是,那麼在方法的任務完成之後是否有辦法處理靜態方法。我是否需要將該類從Static更改爲默認普通類?
編輯
我有另一類這也是靜態的,用於通過上述類:
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;
}
}
}
要我請從連接類「靜態」和使調用這個類每次使用一個獨特的實例?
你的下拉是在GridView中?你能提供一些相關的aspx代碼嗎? – 2012-02-24 06:01:47
No DropDown不在GridView中,但是無論何時我需要填充DropDown或GridView,我都會調用此類,如下所示:reuse.FillDropDownList(「Select CustomersNames From Customer,ComboBox1); – RKh 2012-02-24 06:06:41
我剛剛意識到GridViews已填充通過SQL DataSource,每個GridView都是唯一的 – RKh 2012-02-24 06:07:59