提高.NET效能的最佳實踐

一劍平江湖發表於2013-08-23
1)避免使用ArrayList,因為物件要轉化為System.Object加入ArrayList,取出時又要轉化為想要的型別,設計到大量的裝箱拆箱過程,推薦使用自定義集合取代ArrayList,.net還在System.Collection.Specialized名稱空間下為string提供了一個強型別的集合類StringCollection
 
2)用Hashtable 取代其他字典型別,如:StringDictionary, NameValueCollection, HybridCollection。
 
3)經常為字串宣告常量來封裝他們
   //避免
   MyObject obj = new MyObject();
   obj.Status = "ACTIVE"; 
   //推薦    
   const string C_STATUS = "ACTIVE";
   MyObject obj = new MyObject();
   obj.Status = C_STATUS;
 




4)使用String.Compare取代將兩個字串轉化為uppercase或lowercase再來比較他們
   const string C_VALUE = "COMPARE";
   if (String.Compare(sVariable, C_VALUE, true) == 0)
   {
         Console.Write("SAME");
   }
 
5)避免使用+操作符來連線字串,而使用StringBuilder來連線
   //避免
   String sXML = "<parent>";
   sXML += "<child>";
   sXML += "Data";
   sXML += "</child>";
   sXML += "</parent>";              //推薦
   StringBuilder sbXML = new StringBuilder();
   sbXML.Append("<parent>");
   sbXML.Append("<child>");
   sbXML.Append("Data");
   sbXML.Append("</child>");
   sbXML.Append("</parent>");
 




6)對於只讀xml文件,用XPathDocument取代XMLDocumentt
   //避免
   XmlDocument xmld = new XmlDocument();
   xmld.LoadXml(sXML);
   txtName.Text = xmld.SelectSingleNode("/packet/child").InnerText;
   //推薦
   XPathDocument xmldContext = new XPathDocument(new StringReader(oContext.Value));
   XPathNavigator xnav = xmldContext.CreateNavigator();
   XPathNodeIterator xpNodeIter = xnav.Select("packet/child");
   iCount = xpNodeIter.Count;
   xpNodeIter = xnav.SelectDescendants(XPathNodeType.Element, false); 
   while(xpNodeIter.MoveNext())
   {
         sCurrValues += xpNodeIter.Current.Value+"~"; 
   }


7)避免在迴圈體類宣告並初始化物件,而應該在迴圈體外宣告,在迴圈體類初始化!
   //避免
   for(int i=0; i<10; i++)
   {
       SomeClass objSC = new SomeClass();
   }
   //推薦
   SomeClass objSC = null;
   for(int i=0; i<10; i++)
   {
       objSC = new SomeClass();
   }
 
下面是專門針對Web程式效能的設計方針
1) Viewstate 會動態增加頁面體積,所以要小心的使用控制元件的Viewstate 屬性。
2) 儘可能使用ajax。
3) 使用server.tranfer取代response.redirect。
4) 儘可能使用repeater和datalist取代datagrid。
5) 儘量避免Throw來控制程式流程,因為Throw會消耗大量資源。
6) 避免過度使用異常處理程式塊,只在你無法控制的地方做異常處理。
7) 大量dataset很昂貴,儘量一次取得最多的資料,然後銷燬dataset
8) 使用快取
9) 使用合適的認證機制
10)使用Finally方法釋放資源
11)網站釋出後將Debug和trace設為false。

相關文章