تاخیر چند روزه در پایین اومدن سرعت به احتمال زیاد نشانه از دست رفتن منابع سیستمه (که به یک سایت خاص اختصاص داده شده) حالا تنها منبع هایی که به ذهن من می رسه connection و datareader هست.
سلام
من این طور فکر نمیکنم .
چرا که اولاً احتمالاً شما الان Request های زیادی ندارید و برای همین حتی اگه کانکشن هم باز بمونه پس از تایم اوتش بسته میشه .
نمیگم این دردسر ساز نیست و بسیار خطرناکه اما خوب فعلاً احتمالش کمه ..
Page_Load بهش مقدار دادم response = Response حالا می تونم توی Page_Unload برای بازدید کننده از متد response.Write استفاده کنم! مدت زمان ساخت صفحه هم به این راه فرستاده می شه. آیا این کار مشکل ساز نیست؟ response آزاد می شه یا توی جای پیشنهاد نشده ای استفاده شده منابع سیستم رو اشغال می کنه و نگه می داره؟ کد ساده شده ش رو پیوست کردم.
بهتره شما این کار رو در رویدادهای بالا تر از Unload بکنید چون در Unload صفحه از دسترس Asp.Net دیگه داره خارج میشه و بعضی از کارها توی این روال نبایست انجام بشه ،
در حال فکر نمیکنم مشکل از این هم باشه !
خوب من اون کد رو یه نگاه کردم .
اولاً : تمامی کدها Catch نداه مخصوصاً Connection.Open ها و Using های زیری .
دوماً : شما توی کد زیر :
using (System.Data.OleDb.OleDbCommand command = connection.CreateCommand())
{
command.CommandText = selectSql;
connection.Open();
try
{
DataTable dataTable = new DataTable();
using (OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnect ion))
{
try
{
dataTable.Load(reader);
//if (recordsPerPage)
if (pageNumber > 1 && recordsPerPage > 0)
{
int removeRecordCount = recordsPerPage * (pageNumber - 1);
if (dataTable.Rows.Count <= removeRecordCount)
dataTable.Rows.Clear();
else
for (int i = 0; i < removeRecordCount; i++)
if (dataTable.Rows.Count > 1)
dataTable.Rows.Remove(dataTable.Rows[0]);
}
if (recordsPerPage > 0)
{
if (dataTable.Rows.Count > 0)
{
if (dataTable.Rows.Count == recordsPerPage + 1)
{
recordsRemain = true;
dataTable.Rows.Remove(dataTable.Rows[dataTable.Rows.Count - 1]);
}
}
}
reader.Close();
connection.Close();
return dataTable;
}
catch
{
if (!reader.IsClosed)
reader.Close();
connection.Close();
throw new Exception("Error in Database.OleDbDatabase.GetData()");
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message + ((char)10).ToString() + command.CommandText);
}
}
اگه دقت کنید کانکشن همین طوری بازه تا End Using و این در حال هست که For های تو در تویی هم داره که خوب این مدت کانکشن نباید باز بمونه .
و در کل تا میتونید از حلقه ها کمتر استفاده کنید ( مخصوصاً یه جا دیدم ریدر توی یه حلقه هست ! )
موفق باشید