程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 如何優化.NET的性能

如何優化.NET的性能

編輯:關於C#

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策略來提高性能
好了 今天就寫到這裡,  以後有空再寫。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved