PDA

View Full Version : کند بودن سایت در خواندن اطلاعات از دیتابیس



elmira_63
شنبه 04 اردیبهشت 1389, 08:10 صبح
با سلام
من یه سایت نوشتم (البته این اولین کارمه توی asp به عبارتی خیلی تازه کارم)
که یه فرم ثبت نام دارم که توی این فرم یه سری DropDownList هست که اطلاعاتش رو از دیتابیس میخونه به خاطر همین وقتی که این صفحه رو up کردم خیلی خیلی این صفحم کند باز می شه اینم آدرس اون صفحست http://karavaranjob.net/jobseeker_submit.aspx

اینم کدای اون صفحست


using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class Site_Forms_JobSeeker_Submit : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind_dropdown();
Bind_Majer();
Bind_Trend();
Bind_JobTitle();
DropDown_Ostan.SelectedIndex = -1;
BindData_Message();
}
BindData_propaganda();
ViewState["Code_LastJob"] = "";
}
public void BindData_Message()
{
BLL_Message data = new BLL_Message();
DataTable dt = new DataTable();
dt = data.select();
Label Lbl_marquee = (Label)Master.FindControl("Lbl_marquee");
Lbl_marquee.Text = dt.Rows[0][2].ToString();
}
protected void Bind_JobTitle()
{
BLL_JobTitle data = new BLL_JobTitle();
DataTable dt = new DataTable();
dt = data.Bind_JobTitle();
DropDown_Job.DataTextField = "tjt_name";
DropDown_job1.DataTextField = "tjt_name";
DropDown_job2.DataTextField = "tjt_name";
DropDown_job3.DataTextField = "tjt_name";
DropDown_job4.DataTextField = "tjt_name";
//DropDown_Job.DataValueField = "tjt_code";
DropDown_Job.DataSource = dt;
DropDown_Job.DataBind();
DropDown_job1.DataSource = dt;
DropDown_job1.DataBind();
DropDown_job2.DataSource = dt;
DropDown_job2.DataBind();
DropDown_job3.DataSource = dt;
DropDown_job3.DataBind();
DropDown_job4.DataSource = dt;
DropDown_job4.DataBind();
}

protected void Bind_Majer()
{
BLL_Majer data = new BLL_Majer();
DataTable dt = new DataTable();
dt = data.select_Majer();
DropDown_Majer.DataTextField = "TMA_Name";
DropDown_Majer.DataValueField = "TMA_Code";
DropDown_Majer.DataSource = dt;
DropDown_Majer.DataBind();
}
protected void Bind_Trend()
{
BLL_Majer data = new BLL_Majer();
DataTable dt = new DataTable();
dt = data.select_Trend();
DropDown_Trend.DataTextField = "TT_Name";
DropDown_Trend.DataValueField = "TT_Code";
DropDown_Trend.DataSource = dt;
DropDown_Trend.DataBind();
}
protected void BindData_propaganda()
{
BLL_Propaganda data = new BLL_Propaganda();
DataTable dt = new DataTable();
data.ShowInHome1 = false;
data.ShowInSubpages1 = true;
dt = data.BindPropaganda();
DataList DataList2 = (DataList)Master.FindControl("DataList1");
DataList2.DataSource = dt;
DataList2.DataBind();
}
protected void bind_dropdown()
{
BLL_City data = new BLL_City();
DataTable dt = new DataTable();
dt = data.Fill_ostan();
DropDown_Ostan.DataTextField = "to_name";
DropDown_Ostan.DataValueField = "to_code";
DropDown_Ostan.DataSource = dt;
DropDown_Ostan.DataBind();
}

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
if (MultiView1.ActiveViewIndex == 0)
{
if (check_ok.Checked == true)
{
MultiView1.ActiveViewIndex += 1;
}
else
{
Lbl_Check_Ok.Visible = true;
ImgBtn_Per.Visible = false;
}
}
else if (MultiView1.ActiveViewIndex != 5)
{
MultiView1.ActiveViewIndex += 1;
}
else
{

}

}
protected void MultiView1_ActiveViewChanged(object sender, EventArgs e)
{
if (MultiView1.ActiveViewIndex == 0)
{
ImgBtn_Per.Visible = false;
}
else
{
ImgBtn_Per.Visible = true;
}
if (MultiView1.ActiveViewIndex == 5)
{
ImgBtn_Next.Visible = false;
}
else
{
ImgBtn_Next.Visible = true;
}
if (MultiView1.ActiveViewIndex == 4)
{
DropDownList day = (DropDownList)UC_Date1.FindControl("DropDown_Day");
DropDownList month = (DropDownList)UC_Date1.FindControl("DropDown_month");
TextBox year = (TextBox)UC_Date1.FindControl("Txt_Year");
Bind_LastJob();
Lbl_Adress.Text = Txt_Adress.Text;
Lbl_BirthDay.Text = year.Text+"/"+month.SelectedValue.ToString()+"/"+day.Text;
Lbl_City.Text = DropDown_City.Text;
Lbl_Conversation.Text = DropDown_Conversation.Text;
Lbl_Email.Text = Txt_Email.Text;
Lbl_Job1.Text = DropDown_job1.Text;
Lbl_Job2.Text = DropDown_job2.Text;
Lbl_Job3.Text = DropDown_job3.Text;
Lbl_Job4.Text = DropDown_job4.Text;
Lbl_Language.Text = DropDown_Language.Text;
Lbl_Lenght.Text = Txt_Length.Text;
Lbl_Lname.Text = Txt_Lname.Text;
Lbl_Majer.Text = DropDown_Majer.Text;
Lbl_Married.Text = DropDown_Marrid.Text;
Lbl_Name.Text = Txt_Name.Text;
Lbl_National_Code.Text = Txt_National_Code.Text;
Lbl_Ostan.Text = DropDown_Ostan.Text;
Lbl_ReadWrite.Text = DropDown_ReadWrite.Text;
Lbl_Safe.Text = DropDown_Safe.Text;
Lbl_Salary.Text = Txt_Salary.Text;
Lbl_SectionStudy.Text = DropDown_SectionStudy.Text;
Lbl_Sex.Text = DropDown_Sex.Text;
Lbl_Trend.Text = DropDown_Trend.Text;
Lbl_Weight.Text = Txt_Weight.Text;
}
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
if (MultiView1.ActiveViewIndex != 0)
MultiView1.ActiveViewIndex -= 1;
}
protected void check_ok_CheckedChanged(object sender, EventArgs e)
{
if (check_ok.Checked)
Lbl_Check_Ok.Visible = false;
}
protected void DropDown_Ostan_SelectedIndexChanged(object sender, EventArgs e)
{
BLL_City data = new BLL_City();
data.Pid =Convert.ToInt32(DropDown_Ostan.SelectedValue.ToSt ring());
DataTable dt = new DataTable();
dt=data.Fill_City();
//System.Threading.Thread.Sleep(2000);
DropDown_City.DataTextField = "tc_name";
DropDown_City.DataSource = dt;
DropDown_City.DataBind();
}
protected void ImageButton1_Click1(object sender, ImageClickEventArgs e)
{
BLL_JobSeeker data = new BLL_JobSeeker();
data.Code = Session.SessionID.ToString();
data.Company = Txt_Company.Text;
data.JobTitle_LastJob1 = DropDown_Job.Text;
data.Level = DropDown_Level.Text;
data.Time =Convert.ToInt32(Txt_Time.Text);
if (data.Insert_LastJob())
{
Bind_LastJob();
Empty_LastJob();
}
else
{
string alert;
alert = "alert(' ')";
ScriptManager.RegisterStartupScript(Page, this.GetType(), "kjjh", alert, true);
}
}
protected void Bind_LastJob()
{
BLL_JobSeeker data = new BLL_JobSeeker();
DataTable dt = new DataTable();
data.Code = Session.SessionID;
dt = data.Bind_Lastjob();
GridView1.DataSource = dt;
GridView1.DataBind();
GridView2.DataSource = dt;
GridView2.DataBind();
}
protected void Empty_LastJob()
{
Txt_Time.Text = "";
Txt_Company.Text = "";
DropDown_Job.Text = "";
DropDown_Level.Text = "";
}


protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
BLL_JobSeeker data = new BLL_JobSeeker();
data.Code_LastJob = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value.ToString());
if (data.Delete_LastJob())
{
Bind_LastJob();
}
}
}

Behrouz_Rad
شنبه 04 اردیبهشت 1389, 14:38 عصر
شما 482 کیلو بایت حجم صفحت هست که 440 کیلو بایتش رو فقط ViewState اشغال کرده!
نوع UI صفحت مشکل داره. از UpdatePanel هم استفاده کردی. اگر مراحل ثبت نام رو چند قسمت کنی و از MultiView استفاده کنی و ViewState کنترل هایی که نیاز به نگهداری وضعیتشون نداری رو False کنی بهتره.

موفق باشید.

elmira_63
شنبه 04 اردیبهشت 1389, 16:05 عصر
شما 482 کیلو بایت حجم صفحت هست که 440 کیلو بایتش رو فقط ViewState اشغال کرده!
نوع UI صفحت مشکل داره. از UpdatePanel هم استفاده کردی. اگر مراحل ثبت نام رو چند قسمت کنی و از MultiView استفاده کنی و ViewState کنترل هایی که نیاز به نگهداری وضعیتشون نداری رو False کنی بهتره.

موفق باشید.

ممنون زا توجهتون
ولی من از update panel استفاده نکردم از multi view هست ولی جایی view هام و false نکردم در ضمن چطور فهمیدید که چقدر از حجم صفحم رو viewstate اشغال کرده؟؟؟

Alireza_Salehi
شنبه 04 اردیبهشت 1389, 16:06 عصر
این صفحه چیزی نداره (با در نظر رگفتن همه کنترل های ویزارد) چرا اینقدر ViewStat بزرگی داره؟
من صفحه به مراتب شلوغ تر از این داشتم ولی اینقدر سنگین نبوده !

1. به نظرم اول از همه ViewState همه کنترل های غیر ضروری رو غیر فعال کن
2. از GridView استفاده نکن (کلا حرام است مگر اینه مجبور بشید)
3. از آخرین نسخه ASP.NET AJAX و بالاخص ToolkitScriptManager به جای ScriptManager استفاده کن.
4. قابلیت فشرده سازی رو هم فعال کن:

<system.web.extensions>
<scripting>
<scriptResourceHandler enableCompression="true" enableCaching="true"/>
</scripting>
</system.web.extensions>5. اسم کنترل های container رو حداکثر یک اسم سه حرفی انتخاب کن (در حالتی که کنترل ها زیاد هستند در کاهش حجم صفحه اثر داره)
6. از compositscript هم استفاده کن
7. scriptmode مربوط به updatepanel رو روی release قرار بده.
8. این هم table هم که استفاده کردی به نظرم حذف کن بهتره از div layout استفاده کنی. و همچنین از inline css استفاده نکن.

Alireza_Salehi
شنبه 04 اردیبهشت 1389, 16:16 عصر
ممنون زا توجهتون
ولی من از update panel استفاده نکردم از multi view هست ولی جایی view هام و false نکردم در ضمن چطور فهمیدید که چقدر از حجم صفحم رو viewstate اشغال کرده؟؟؟
توی کدت اثر UpdatePanel هست....
دنبال یک hiddenfield با اسم VIEWSTAT__ بگرد....

Behrouz_Rad
شنبه 04 اردیبهشت 1389, 16:50 عصر
ممنون زا توجهتون
ولی من از update panel استفاده نکردم از multi view هست ولی جایی view هام و false نکردم در ضمن چطور فهمیدید که چقدر از حجم صفحم رو viewstate اشغال کرده؟؟؟
ViewState ات مشکوکه. فایل aspx و cs مربوط رو اگه بگذاری بهتر میشه نظر داد.
تصویر ضمیمه حجم ViewState صفحت رو نشون میده.

موفق باشید.

elmira_63
یک شنبه 05 اردیبهشت 1389, 08:56 صبح
این صفحه چیزی نداره (با در نظر رگفتن همه کنترل های ویزارد) چرا اینقدر ViewStat بزرگی داره؟
من صفحه به مراتب شلوغ تر از این داشتم ولی اینقدر سنگین نبوده !

1. به نظرم اول از همه ViewState همه کنترل های غیر ضروری رو غیر فعال کن
2. از GridView استفاده نکن (کلا حرام است مگر اینه مجبور بشید)
3. از آخرین نسخه ASP.NET AJAX و بالاخص ToolkitScriptManager به جای ScriptManager استفاده کن.
4. قابلیت فشرده سازی رو هم فعال کن:

<system.web.extensions>
<scripting>
<scriptResourceHandler enableCompression="true" enableCaching="true"/>
</scripting>
</system.web.extensions>5. اسم کنترل های container رو حداکثر یک اسم سه حرفی انتخاب کن (در حالتی که کنترل ها زیاد هستند در کاهش حجم صفحه اثر داره)
6. از compositscript هم استفاده کن
7. scriptmode مربوط به updatepanel رو روی release قرار بده.
8. این هم table هم که استفاده کردی به نظرم حذف کن بهتره از div layout استفاده کنی. و همچنین از inline css استفاده نکن.


مگه کنترل هام view state دارن؟؟؟ :بامزه: میشه در مورد این view state کوفتی یکم بیشتر توضیح بدید؟ من توی صفحم از یه view state استفاده کردم برای نگهداری یه کد، همین

فایل cs رو ضمیمه میکنم

Nightbat
یک شنبه 05 اردیبهشت 1389, 09:21 صبح
توی properties هر کنترل یه viewstate داره که می تونی false کنی.

Alireza_Salehi
یک شنبه 05 اردیبهشت 1389, 14:28 عصر
ASP.NET برای حفظ حالت کنترل ها به ازای هر کنترل مقادیری به ViewState اضافه می کند، جهت غیر فعال کردن آن برای هر کنترل باید مقدار ViewState هر کنترل را برابر با false قرار دهید.

تا حد ممکن باید محتویات UpdatePanel را کاهش دهید، این همه Table و جزئیاتش فقط صفحه رو سنگین میکنه سعی کنید از div کلاس های CSS استفاده کنید( به جای جدول و inline css)

elmira_63
یک شنبه 05 اردیبهشت 1389, 16:29 عصر
ASP.NET برای حفظ حالت کنترل ها به ازای هر کنترل مقادیری به ViewState اضافه می کند، جهت غیر فعال کردن آن برای هر کنترل باید مقدار ViewState هر کنترل را برابر با false قرار دهید.

تا حد ممکن باید محتویات UpdatePanel را کاهش دهید، این همه Table و جزئیاتش فقط صفحه رو سنگین میکنه سعی کنید از div کلاس های CSS استفاده کنید( به جای جدول و inline css)

من مشکل بالا بودن حجم view state صفحم رو فهمیدم ، چون من توی این صفحه حدود 6 تا dropdown list دارم که اطلاعاتش از دیتابیس خونده میشه و هر کدوم از این dropdown ها حدود 1300 تا رکورد data توش بایند میشه که جمعاً حدود 8000 رکورد data میشه که فکر میکنم به همین خاطر که انقدر حچمش بالا رفته چون یه بار امتحانی view state این چند تا رو false کردم درست شد ولی دیگه اطلاعاتی رو توی این drop down list ها نشون نمی داد .
حالا اگه راه حلی برای این مشکل دارید ممنون میشم
در ضمن من هنوز نفهمیدم چطور حجم صفحه و میزان حجم اشغالی view state هام رو بدست بیارم :خجالت:

Alireza_Salehi
یک شنبه 05 اردیبهشت 1389, 18:54 عصر
اگر از فایرفاکس استفاده می کنید این افزونه حجم ViewState صفحه را در قسمت پائین و سمت راست مرورگر به شما نشان می دهد.
https://addons.mozilla.org/en-US/firefox/addon/5956

شما باید هر وقت نیاز هست DropDown مربوطه رو با کمترین حجم داده پر کنید ، یعنی مثلا فقط DropDown های صفحه ای که دیده می شود را پر کنید، نه همه را یکجا.

من یک صفحه ای با کلی کنترل درست کرده بودم که حجمش به 1.3 مگابایت رسیده بود ولی با این حال ViewState ش فقط 110 کیلوبایت حجم داشت.

به این دو مورد هم سری بزنید:
http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/CascadingDropDown/CascadingDropDown.aspx

http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/DynamicPopulate/DynamicPopulate.aspx

elmira_63
چهارشنبه 08 اردیبهشت 1389, 11:10 صبح
من اومدم اون دراپداون ها رو به جای این که اول کار توی پیج لود پر کنم گذاشتم همون ویو آخر پرش کردم یعنی با این کار تا مرحله چهارم ثبت نام مثل برق میره بعد اومدم با استفاده از dll ای که ضمیمه کردم view state رو compress کردم که باعث شد حجم view state از 488 کیلو به 215 کیلو کاهش پیدا کنه
اگه توجه کرده باشید توی مرحله چهارم اگه اشتباه نکنم چهار تا دراپداون دارم که اطلاعاتشون مثل هم هست و دقیقا از یه جدول پر میشه یعنی اومدم یه select نوشتم و اطلاعات رو ریختم توی یه data table و data source این دراپداون ها رو برابر این data table قرار دادم نمی دونم این کار درسته یا نه؟؟؟ آیا راه دیگه ای هم هست که اطلاعات حجم کمتری بگیره یا نه ؟؟
حالا یه چیز دیگه ای که هست اینه که حجم view state توی سیستم خودم کم میشه ولی وقتی سایت رو up می کنم اونجا تغییری نمی کنه در واقع کمپرس نمیشه؟؟
اون dll هم تو پوشه bin هست web.config رو همتغییر دادم؟؟؟؟

elmira_63
شنبه 11 اردیبهشت 1389, 14:27 عصر
کیست مرا یاری کند؟؟؟؟