• 优化 .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策略来提高性能

  • 相关阅读:
    FocusScope学习三: 对FocusScope 的探究与总结
    FocusScope学习二: 很好的理解FocusScope的工作原理
    不同XML之间节点的拷贝
    计算几何DotVector
    计算几何Graham法凸包
    计算几何UVa10652
    线性筛三合一,强大O(n)
    计算几何AngRadVector
    线性筛euler,强大O(n)
    矩阵bzoj1898
  • 原文地址:https://www.cnblogs.com/vagerent/p/1181451.html
Copyright © 2020-2023  润新知