提高.NET效能的最佳實踐
1)避免使用ArrayList,因為物件要轉化為System.Object加入ArrayList,取出時又要轉化為想要的型別,設計到大量的裝箱拆箱過程,推薦使用自定義集合取代ArrayList,.net還在System.Collection.Specialized名稱空間下為string提供了一個強型別的集合類StringCollection
2)用Hashtable 取代其他字典型別,如:StringDictionary, NameValueCollection, HybridCollection。
3)經常為字串宣告常量來封裝他們
//避免
MyObject obj = new MyObject();
obj.Status = "ACTIVE";
//推薦
const string C_STATUS = "ACTIVE";
MyObject obj = new MyObject();
obj.Status = C_STATUS;
4)使用String.Compare取代將兩個字串轉化為uppercase或lowercase再來比較他們
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)對於只讀xml文件,用XPathDocument取代XMLDocumentt
//避免
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();
}
下面是專門針對Web程式效能的設計方針
1) Viewstate 會動態增加頁面體積,所以要小心的使用控制元件的Viewstate 屬性。
2) 儘可能使用ajax。
3) 使用server.tranfer取代response.redirect。
4) 儘可能使用repeater和datalist取代datagrid。
5) 儘量避免Throw來控制程式流程,因為Throw會消耗大量資源。
6) 避免過度使用異常處理程式塊,只在你無法控制的地方做異常處理。
7) 大量dataset很昂貴,儘量一次取得最多的資料,然後銷燬dataset
8) 使用快取
9) 使用合適的認證機制
10)使用Finally方法釋放資源
11)網站釋出後將Debug和trace設為false。
2)用Hashtable 取代其他字典型別,如:StringDictionary, NameValueCollection, HybridCollection。
3)經常為字串宣告常量來封裝他們
//避免
MyObject obj = new MyObject();
obj.Status = "ACTIVE";
//推薦
const string C_STATUS = "ACTIVE";
MyObject obj = new MyObject();
obj.Status = C_STATUS;
4)使用String.Compare取代將兩個字串轉化為uppercase或lowercase再來比較他們
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)對於只讀xml文件,用XPathDocument取代XMLDocumentt
//避免
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();
}
下面是專門針對Web程式效能的設計方針
1) Viewstate 會動態增加頁面體積,所以要小心的使用控制元件的Viewstate 屬性。
2) 儘可能使用ajax。
3) 使用server.tranfer取代response.redirect。
4) 儘可能使用repeater和datalist取代datagrid。
5) 儘量避免Throw來控制程式流程,因為Throw會消耗大量資源。
6) 避免過度使用異常處理程式塊,只在你無法控制的地方做異常處理。
7) 大量dataset很昂貴,儘量一次取得最多的資料,然後銷燬dataset
8) 使用快取
9) 使用合適的認證機制
10)使用Finally方法釋放資源
11)網站釋出後將Debug和trace設為false。
相關文章
- 17 個提高效能的 Flutter 最佳實踐Flutter
- ASP.NET Core 效能優化最佳實踐ASP.NET優化
- 《.NET最佳實踐》
- JavaScript最佳實踐:效能JavaScript
- Canvas 最佳實踐(效能篇)Canvas
- C# DataSet效能最佳實踐C#
- Golang效能最佳化實踐Golang
- Kubernetes Deployment 最佳實踐
- 前端高效能動畫最佳實踐前端動畫
- SAP ABAP 效能最佳化實踐
- Taro | 高效能小程式的最佳實踐
- Taro:高效能小程式的最佳實踐
- Kubernetes 服務部署最佳實踐(二) ——如何提高服務可用性
- Netty基礎招式——ChannelHandler的最佳實踐Netty
- .NET中異常處理的最佳實踐
- Kubernetes 微服務最佳實踐微服務
- Kubernetes 最佳安全實踐指南
- HBase最佳實踐-讀效能優化策略優化
- MySQL8.0效能最佳化(實踐)MySql
- 10個Spring Boot效能最佳實踐Spring Boot
- HarmonyOS:應用效能最佳化實踐
- ELK 效能(4) — 大規模 Elasticsearch 叢集效能的最佳實踐Elasticsearch
- Kubernetes 部署 Laravel 應用的最佳實踐Laravel
- Kubernetes日誌的6個最佳實踐
- .NET中異常處理的最佳實踐(譯)
- .NET微服務最佳實踐 eShopOnContainers微服務AI
- Kubernetes YAML最佳實踐和策略YAML
- netty4+protobuf3最佳實踐Netty
- 編寫高效能 Java 程式碼的最佳實踐Java
- 毫秒必爭,前端網頁效能最佳實踐前端網頁
- 前端效能最佳化實踐方向與方法前端
- TiDB 效能分析&效能調優&最佳化實踐大全TiDB
- 基於Ascend C的FlashAttention運算元效能最佳化最佳實踐
- App上手教程,提高使用者留存率的最佳實踐辦法APP
- 驗證Kubernetes YAML的最佳實踐和策略YAML
- Active Network實踐:構建Kubernetes平臺的最佳工具
- 華為雲:微服務架構下的效能保障最佳實踐微服務架構
- 京東雲Kubernetes叢集最佳實踐