Wednesday, May 9, 2012

20 Tips to Improve ASP.net Application Performance

  1. Disable Session State 
ปิด Session State ถ้าคุณไม่ได้ใช้หรือต้องการใช้ Sessionซึ่งโดยปกติระบบจะเปิดการใช้งานในโหมดนี้ คุณสามารถยกเลิกการใช้ SessionState เฉพาะบาง pages หรือระบุ pages ได้โดย
          <%@Page language=”c#” Codebehide=”WebForm1.aspx.cs”AutoEventWireup=”false” Inherits=”WebApplication1.WebForm1”EnableSessionState=”false” %>
          หรือสามารถ disable โดยระบุใน web.config โดย setting the <sessionState> mode value to Off
  1. Output Buffering
ใช้ประโยชน์จากคุณสมบัติที่ดีนี้เพื่อลดการส่งข้อมูลกลับไปกลับมาระหว่าง Server
<%response.buffer=true%>
Then use:
<%response.flush=true%>
  1. Avoid Server-Side Validation
พยายามหลีกเลี่ยงการตรวจสอบหรือ validation ทางฝั่ง server ให้ทำทางฝั่ง client แทน
  1. Repeater Control Good, DataList, DataGrid, and DataView controls Bad
Asp.net เป็นแพลตฟอร์มที่ดีเยี่ยม แต่ประกอบไปด้วย controls ที่ซับซ้อนและทำให้performance ลดลงเนื่องจาก generate html code ที่ complex ให้เลือกใช้Asp.net repeater control ซึ่งอาจจะต้องเขียน codeเยอะหน่อยแต่ได้ประสิทธิภาพที่ดี
  1. ใช้ประโยชน์จาก HttpResponse.IsClientConnected ก่อนที่จะประมวลผลงานขนาดใหญ่เพื่อตรวจสอบว่า Client ยัง Connect อยู่
If (Response.IsClientConnected)
{
          Response.Redirect(“PageCS.aspx”,false);
}
  1. ให้ใช้ HTTPServerUtility.Transfer แทน Response.Redirect เนื่องจาก Response.Redirect จะมี Header ในส่วนการเตรียม HTTP requests ที่ไม่จำเป็น
     
  2. เมื่อมีการใช้ Validator Controls ให้ทำการเช็ค Page.IsValid ทุกครั้ง 
  1. Deploy ด้วย Release Build
การ Deploy บนproduction server ไม่ควร Deploy ด้วย Debug mode เนื่องจาก debug modeจะสร้าง PDB ไฟล์และมีการ Track ในส่วน time out ด้วยซึ่งส่งผลถึงความเร็วของระบบ
  1. Turn off Tracing เพื่อลด overhead โดยสามารถกำหนดได้ใน web.config 
<configuration>
   <system.web>
      <trace enabled=”false” pageOutput=”false” />
      <compilation debug=”false” />
   </system.web>
</configuration>
  1.  ควรใช้ Page.IsPostBack เพื่อให้แน่ใจว่าไม่มีการ execute code ที่ไม่จำเป็น 
  1. หลีกเหลี่ยงการใช้ Exception และ Throw Exception พยายาม Try ในส่วนที่คิดว่าจะเกิดให้ได้มากที่สุดเมื่อเกิดแล้วให้ พยายาม Handle เอง เพราะการจัดการ Exception จะใช้ Resource เยอะ ครับสังเกตุง่ายๆครับถ้า Run Web แล้วมีการ Throw Error ออกมาจากระบบจะมีการทำงานที่ช้าลงมาก ผิดกับที่เรา Handle เองแล้ว transfer ไป error page จะเร็วกว่า
  1. ใช้ Caching และ ASP.net cache API เพื่อให้ระบบมีการทำงานที่เร็วขึ้น โดยต้องพิจารณาว่า เราต้องการ cache เมื่อไหร่ และ cache อะไรบ้าง
  1. Create Per-Request Cache 
  1. ให้ใช้ StringBuilder.Append แทนการใช้ String + String
  1. Turn Off ViewState ใน Pageที่ไม่จำเป็นต้องมีการ PostBack กลับมาที่ Server เพื่อลดภาระในการจัดการ Viewstateโดยไม่จำเป็น
Public  ShowOrderTablePage()
{
          This.Init += new EventHandler(Page_Init);
}
Private  void  Page_Init(object sender, System.EventArgs e)
{
          This.EnableViewState = false;
}
  1.  Use Paging
คือเวลาดึงข้อมูลมาแสดงไม่ควรดึงข้อมูลแสดงทั้งหมดทีละมากๆ อาจจะทำให้ Applicationช้า,layoutไม่สวยงาม,เกิด Time Out ดังนั้นควรแบ่งขึ้นมาแสดงเป็น page ไป ย้ำว่าควรPaging จริงๆ ไม่ใช่ดึงข้อมูลขึ้นมาทั้งหมดเก็บใน Data paging แค่ในControl ที่แสดงผลควรจะ Paging ถึงระดับ Database ด้วย
  1.  Use the AppOffline.htm when updating binaries 
  1.  Use ControlState and not ViewState for Controls
ควรใช้ Control state แทนview state ของ Control  จริงๆแล้ว Control State กับ View Stateมีลักษณะคล้ายๆกัน แต่ Control State จะมีการเก็บค่า statebehavior(index, page index, control index) ไว้ใน Cache ที่ Serverส่วนข้อมูลจริงจะเก็บไว้ที่ view state ของหน้า page(hiddenfield) โดยจะจัดรูปแบบเป็น Hybrid Dictionary ในกรณีที่มีหลายๆ Controlเวลา PostBack ก็จะทำการ Deserialized data กลับไปรวมกับ Control stateที่เก็บไว้ที่ Serverซึ่งจะมี performance ดีกว่าเก็บไว้ใน view stateของแต่ละ Control เอง
  1.  Use the Finally Method
พยายามใช้ Finally Block ในการปิด connection หรือ คืนทรัพยากรต่างๆ ให้แก่ระบบ
  1.  Open Strict and Option Explicit

No comments:

Post a Comment