同桌上课用手指进去了好爽_欧美丰满熟妇xxⅹⅹ性大i_成人av天天日天天拍拍_猛男gay帅男gay男男同志_欧美va天堂在线观看_人妻无码av中文系列三里桃花_亚欧免费无码在线观看_久久久精品国产亚洲av水_日韩在线免费看污污污_2021无码专区人妻系列日韩

首頁 優(yōu)化推廣 Asp.net程序性能優(yōu)化(二)

Asp.net程序性能優(yōu)化(二)

來源: | 時間:2013/8/28 14:42:54 |

三、c#(或vb.net)程序改進
1、使用值類型的ToString方法
  在連接字符串時,經常使用"+"號直接將數字添加到字符串中。這種方法雖然簡單,也可以得到正確結果,但是由于涉及到不同的數據類型,數字需要通過裝箱操作轉化為引用類型才可以添加到字符串中。但是裝箱操作對性能影響較大,因為在進行這類處理時,將在托管堆中分配一個新的對象,原有的值復制到新創(chuàng)建的對象中。
  使用值類型的ToString方法可以避免裝箱操作,從而提高應用程序性能。
int num=1;
string str="go"+num.ToString();
2、運用StringBuilder類
  String類對象是不可改變的,對于String對象的重新賦值在本質上是重新創(chuàng)建了一個String對象并將新值賦予該對象,其方法ToString對性能的提高并非很顯著。
  在處理字符串時,最好使用StringBuilder類,其.NET 命名空間是System.Text。該類并非創(chuàng)建新的對象,而是通過Append,Remove,Insert等方法直接對字符串進行操作,通過ToString方法返回操作結果。
  其定義及操作語句如下所示:

  1.  

  2. int num;

  3. System.Text.StringBuilder str = new System.Text.StringBuilder(); //創(chuàng)建字符串

  4. str.Append(num.ToString()); //添加數值num

  5. Response.Write(str.ToString); //顯示操作結果
復制代碼

3、使用 HttpServerUtility.Transfer 方法在同一應用程序的頁面間重定向
  采用 Server.Transfer 語法,在頁面中使用該方法可避免不必要的客戶端重定向(Response.Redirect)。
4、避免使用ArrayList。
因為任何對象添加到ArrayList都要封箱為System.Object類型,從ArrayList取出數據時,要拆箱回實際的類型。建議使用自定義的集合類型代替ArrayList。asp.net 2.0提供了一個新的類型,叫泛型,這是一個強類型,使用泛型集合就可以避免了封箱和拆箱的發(fā)生,提高了性能。
5、使用HashTale代替其他字典集合類型
(如StringDictionary,NameValueCollection,HybridCollection),存放少量數據的時候可以使用HashTable.
6、為字符串容器聲明常量,不要直接把字符封裝在雙引號" "里面。

  1.  

  2. //避免

  3. MyObject obj = new MyObject();

  4. obj.Status = "ACTIVE";

  5. //推薦

  6. const string C_STATUS = "ACTIVE";

  7. MyObject obj = new MyObject();

  8. obj.Status = C_STATUS;
復制代碼

7、不要用ToUpper(),ToLower()轉換字符串進行比較,用String.Compare代替,它可以忽略大小寫進行比較.
例:

  1. const string C_VALUE = "COMPARE";

  2. if (String.Compare(sVariable, C_VALUE, true) == 0)

  3. {

  4. Console.Write( "相同");

  5. }
復制代碼

也可以用str == String.Empty或者str.Length == 0判斷是否為空。(注意判斷輸入數據的長度,可防止sql注入式攻擊)
將String對象的Length屬性與0比較是最快的方法,避免不必要的調用 ToUpper 或 ToLower 方法。
8、類型轉化Int32.TryParse()優(yōu)于Int32.Parse()優(yōu)于Convert.ToInt32()。
建議.NET1.1下用Int32.Parse();.NET2.0用Int32.TryParse()。
因為:
Convert.ToInt32 會把最終的解析工作代理給 Int32.Parse;
Int32.Parse 會把最終的解析工作代理給Number.ParseInt32;
Int32.TryParse 會把最終的解析工作代理給Number.TryParseInt32。
9、如果只是從XML對象讀取數據,用只讀的XPathDocument代替XMLDocument,可以提高性能

  1.  

  2. //避免

  3. XmlDocument xmld = new XmlDocument();

  4. xmld.LoadXml(sXML);

  5. txtName.Text = xmld.SelectSingleNode( "/packet/child").InnerText;

  6. //推薦

  7. XPathDocument xmldContext = new XPathDocument(new StringReader(oContext.Value));

  8. XPathNavigator xnav = xmldContext.CreateNavigator();

  9. XPathNodeIterator xpNodeIter = xnav.Select( "packet/child");

  10. iCount = xpNodeIter.Count;

  11. xpNodeIter = xnav.SelectDescendants(XPathNodeType.Element, false);

  12. while(xpNodeIter.MoveNext())

  13. {

  14. sCurrValues += xpNodeIter.Current.Value+ ",";

  15. }
復制代碼

10、避免在循環(huán)體里聲明變量,應該在循環(huán)體外聲明變量,在循環(huán)體里初始化。
C#程序開發(fā)要遵循的一個基本原則就是避免不必要的對象創(chuàng)建

  1.  

  2. //避免

  3. for(int i=0; i<10; i++)

  4. {

  5. SomeClass objSC = new SomeClass();

  6. }

  7. //推薦

  8. SomeClass objSC = null;

  9. for(int i=0; i <10; i++)

  10. {

  11. objSC = new SomeClass();

  12. }
復制代碼

11、捕獲指定的異常,不要使用通用的System.Exception.

  1.  

  2. //避免

  3. try

  4. {

  5. <some logic>

  6. }

  7. catch(Exception exc)

  8. {

  9. <Error handling>

  10. }

  11. //推薦

  12. try

  13. {

  14. <some logic>

  15. }

  16. catch(System.NullReferenceException exc)

  17. {

  18. <Error handling>

  19. }

  20. catch(System.ArgumentOutOfRangeException exc)

  21. {

  22. <Error handling>

  23. }

  24. catch(System.InvalidCastException exc)

  25. {

  26. <Error handling>

  27. }
復制代碼

12、使用Try...catch...finally時, 要在finally里釋放占用的資源如連接,文件流等
不然在Catch到錯誤后占用的資源不能釋放。

  1. try

  2. {}

  3. catch

  4. {}

  5. finally

  6. {

  7. conntion.close();

  8. }
復制代碼

服務熱線

153 8323 9821

功能和特性

價格和優(yōu)惠

網站和維護

推廣和優(yōu)化

微信服務號