優化.NET的效能
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 = "
sXML += "
sXML += "Data";
sXML += "
sXML += "
//推薦
StringBuilder sbXML = new StringBuilder();
sbXML.Append("
sbXML.Append("
sbXML.Append("Data");
sbXML.Append("
sbXML.Append("
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
{
}
catch(Exception exc)
{
}
//推薦
try
{
}
catch(System.NullReferenceException exc)
{
}
catch(System.ArgumentOutOfRangeException exc)
{
}
catch(System.InvalidCastException exc)
{
}
9) 使用Try...catch...finally時, 要在finally裡釋放佔用的資源如連接,文件流等不然在Catch到錯誤後佔用的資源不能釋放。
try
{
…
}
catch
{...}
finally
{
conntion.close()
}
10) 避免使用遞歸呼叫和巢狀循環,使用他們會嚴重影響效能,在不得不使用的時候才使用。
11) 使用適當的Caching策略來提高性能好了今天就寫到這裡, 以後有空再寫。
http://www.cnblogs.com/timone/archive/2006/11/17/563965.html