본문 바로가기
프로그래밍/JAVA, .NET, 기타

[닷넷] 웹 타임아웃 문제 해결하기

by [바가지] 2017. 10. 10.
반응형

웹 화면을 개발 할 경우 조회 시간이 길어 타임아웃 에러가 발생 할 때가 있다. 

쿼리 튜닝 작업을 통해 속도를 개선하면 가장 좋겠지만, 튜닝을 해도 시간을 단축 시키지 못 할 경우 어쩔 수 없이 타임아웃 시간을 설정 해 주어야 한다.

업무시스템이 아닌 일반 홈페이지는 당연히 쿼리 튜닝을 해야 할 것이다. 화면이 오픈되기까지 3초 이상 시간이 지연되면 사람들은 보통 사이트를 종료한다고 한다.

튜닝에 대한 부분은 다음에 다루기로 하고 이번 포스팅에서는 타임아웃으로 인한 오류 발생을 방지하는 방법에 대하여 알아보도록 하자.


■ 타임아웃 발생 소스

 bool bolReturn = false;

 ClsConn cnn = null;

 DataSet ds = new DataSet();

 SqlDataReader dr = null;


 try

 {

   cnn = new ClsConn();

   SqlParameter[] sParam = {

new SqlParameter ("@Param1",  txtDt1.Text.Replace("-", "")),

new SqlParameter ("@Param2",  txtDt3.Text.Replace("-", "")),

                                        new SqlParameter ("@Param3",  txtDt3.SelectedValue.ToString())

   };


   dr = SqlHelper.ExecuteReader(cnn.ConnectionString, "프로시저명", sParam);

  

   bolReturn = dr.HasRows;

   grdList.DataSource = dr;

   grdList.DataBind();               

 }

 catch (Exception err)

 {

   return false;

 }

 finally

 {

   if (ds != null) ds.Dispose();

   if (comSql != null) comSql.Dispose();

 }


■ 타임아웃 설정을 통해 타임아웃 발생되지 않도록 하였다.

 bool bolReturn = false;

 SqlConnection conn = new SqlConnection(new ClsConn().ConnectionString);

 SqlDataReader dr = null;

 SqlCommand cmd = null;


 try

 {

   cmd = new SqlCommand("프로시저명", conn);

   cmd.CommandType = CommandType.StoredProcedure;

   cmd.CommandTimeout = 999999; //타임아웃 설정


   cmd.Parameters.Add("@FPrtDt", SqlDbType.VarChar, 8);

   cmd.Parameters.Add("@TPrtDt", SqlDbType.VarChar, 8);

   cmd.Parameters.Add("@State", SqlDbType.VarChar, 8);


   cmd.Parameters["@Param1"].Value = txtDt1.Text.Replace("-", "");

   cmd.Parameters["@Param2"].Value = txtDt2.Text.Replace("-", "");

   cmd.Parameters["@Param3"].Value = txtDt3.SelectedValue.ToString();


   conn.Open();


   dr = cmd.ExecuteReader();

   bolReturn = dr.HasRows;

   grdList.DataSource = dr;

   grdList.DataBind();


   conn.Close();

 }

 catch (Exception err)

 {

   return false;

 }

 finally

 {

   conn.Close();

   if (dr != null) ((IDisposable)dr).Dispose();

 }


 return bolReturn;


반응형