优化 .NET的性能[转]

优化 .NET的性能 
   
转自:http://www.cnblogs.com/Donets/archive/2007/04/05/701726.html

  1)避免使用ArrayList。
   因为任何对象添加到ArrayList都要封箱为System.Object类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用自定义的集合类型代替ArrayList。.net 2.0提供了一个新的类型,叫泛型,这是一个强类型,使用泛型集合就可以避免了封箱和拆箱的发生,提高了性能。
  
  2)使用HashTale代替其他字典集合类型(如StringDictionary,NameValueCollection,HybridCollection),存放少量数据的时候可以使用HashTable.
  
  3)为字符串容器声明常量,不要直接把字符封装在双引号" "里面。 
   

//避免 
   
// 
   MyObject obj = new MyObject(); 
   obj.Status 
= "ACTIVE"
   
   
//推荐 
   const string C_STATUS = "ACTIVE"
   MyObject obj 
= new MyObject(); 
   obj.Status 
= C_STATUS; 

   
  4) 不要用UpperCase,Lowercase转换字符串进行比较,用String.Compare代替,它可以忽略大小写进行比较.
  
   例: 

   
   
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) If you are only reading from the XML object, avoid using XMLDocumentt, instead use XPathDocument, which is readonly and so improves performance.
  如果只是从XML对象读取数据,用只读的XPathDocument代替XMLDocument,可以提高性能

 

   //避免 
   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(); 
   
   . 
   . 
   . 
   } 
   


  8) 捕获指定的异常,不要使用通用的System.Exception. 
   

//避免 
   try 
   { 
   
<some logic> 
   } 
   
catch(Exception exc) 
   { 
   
<Error handling> 
   } 
   
   
//推荐 
   try 
   { 
   
<some logic> 
   } 
   
catch(System.NullReferenceException exc) 
   { 
   
<Error handling> 
   } 
   
catch(System.ArgumentOutOfRangeException exc) 
   { 
   
<Error handling> 
   } 
   
catch(System.InvalidCastException exc) 
   { 
   
<Error handling> 
   } 
   


   
  9) 使用Try...catch...finally时, 要在finally里释放占用的资源如连接,文件流等
  不然在Catch到错误后占用的资源不能释放。 
   

   try 
   { 
    
   } 
   
catch 
   {
   
finally 
   { 
   conntion.close() 
   } 


  10) 避免使用递归调用和嵌套循环,使用他们会严重影响性能,在不得不用的时候才使用。
  
  11) 使用适当的Caching策略来提高性能

posted on 2008-05-04 11:22  上午的绝缘杯  阅读(458)  评论(0编辑  收藏  举报