优化 .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)为字符串容器声明常量,不要直接把字符封装在双引号" "里面。 
   

优化 .NET的性能[转]//避免 
优化 .NET的性能[转]   
// 
优化 .NET的性能[转]
   MyObject obj = new MyObject(); 
优化 .NET的性能[转]   obj.Status 
= "ACTIVE"
优化 .NET的性能[转]   
优化 .NET的性能[转]   
//推荐 
优化 .NET的性能[转]
   const string C_STATUS = "ACTIVE"
优化 .NET的性能[转]   MyObject obj 
= new MyObject(); 
优化 .NET的性能[转]   obj.Status 
= C_STATUS; 
优化 .NET的性能[转]

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

优化 .NET的性能[转]   
优化 .NET的性能[转]   
const string C_VALUE = "COMPARE"
优化 .NET的性能[转]   
if (String.Compare(sVariable, C_VALUE, true== 0
   


   
  5) 用StringBuilder代替使用字符串连接符 “+”,.
  
   //避免 

优化 .NET的性能[转]   String sXML = "<parent>"
优化 .NET的性能[转]   sXML 
+= "<child>"
优化 .NET的性能[转]   sXML 
+= "Data"
优化 .NET的性能[转]   sXML 
+= "</child>"
优化 .NET的性能[转]   sXML 
+= "</parent>"


   
   //推荐 

优化 .NET的性能[转]   StringBuilder sbXML = new StringBuilder(); 
优化 .NET的性能[转]   sbXML.Append(
"<parent>"); 
优化 .NET的性能[转]   sbXML.Append(
"<child>"); 
优化 .NET的性能[转]   sbXML.Append(
"Data"); 
优化 .NET的性能[转]   sbXML.Append(
"</child>"); 
优化 .NET的性能[转]   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 
   { 
   优化 .NET的性能[转] 
   } 
   
catch 
   {优化 .NET的性能[转]
   
finally 
   { 
   conntion.close() 
   } 


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

相关文章:

  • 2021-12-05
  • 2021-08-11
  • 2021-11-26
  • 2022-12-23
  • 2022-12-23
  • 2021-09-23
  • 2021-08-27
猜你喜欢
  • 2022-12-23
  • 2021-10-09
  • 2021-12-10
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案