程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 如何最大限度提高.NET的性能 (續)

如何最大限度提高.NET的性能 (續)

編輯:.NET實例教程
 昨天發了一篇如何最大限度提高.Net性能的文章,評論的人不少,在這裡非常感謝大家的評論,其中有些是指出文章的一些錯誤的,在這裡感謝那些耐心寫評論的老大們,小弟受益不少。
  
   昨天那篇主要是從寫代碼的一些細節上來提高速度,可能很些是難實際感受到性能的提高,但是作為一名程序員,不斷提高自己代碼的質量是不斷追求的目標。
  
   其實隨著硬件的發展,現在硬件的速度已經遠遠滿足大多數人的的需要了,甚至有些人提出算法在現在軟件開發中越來越不起作用了。記得以前看過麻省的數據結構視頻,講課的教授就問過一個問題(我記得不大清楚了,他的大概意思就是這樣):既然算法現在變得不重要了,為什麼我們還要在這裡研究呢?他給的答案就是“SPEED” ,我們追求速度就像賽車手追求速度一樣!
  
   現在很多系統的開發都不會把速度放在第一位,其他如:穩定性,安全性,可重用性等往往最優先考慮的。現在設計模式,開發架構等主要都不是為了解決性能問題的。以上這些都是分析師,架構師考慮的,像我們一些小小的程序員就只能在代碼的一些小地方,一個類,一個方法,一行代碼上面來優化程序。我覺得多注意一些細節上的東西還是很好的。
   
    好了廢話說了一大堆,現在來說說今天的主題,現在開發的很多網絡系統性能開銷主要是在數據的讀取,傳輸上,更快的讀取速度,更少的網絡寬帶占用是我們追求的目標。我就從這方面來談談如何提高.Net的性能。
   
    1. 在數據層分頁數據。可以通過ExcuteReader或者存儲過程實現,方法很多,我就不多說了.(可以看看我寫的   )   

    2. 盡量使用ExcuteReader來讀取數據,ExcuteReader是效率最高的,在MicroSoft的PetShop 4.0全部數據訪問都是用ExcuteReader來實現的,除非你對非連接有特殊要求(如 SmartClIEnt智能客戶端等)。

    3. 在非連接場合,用DataTable比用DataSet性能好,除非你要保存多個關系表。

    4. 使用DataTable的ImportRow方法。
       有些場合需要把大量數據從一個DataTable復制到另一個DataTable,使用DataTable的ImportRow方法可以大大提高性能,數據量少時沒多大分別,當數據量到一萬行以上時就可以明顯的提高,可以達到幾倍。

    5. 把數據序列化為二進制文件方便傳輸。
     我們在處理DataSet,DataTable對象時可以序列化為XML文件,如果要在網絡傳輸,XML文件會產生內存,網絡帶寬等資源問題。這時我們就可以把它序列化為二進制文件,這樣生成的文件會減少很多,代碼如下:
       FileStream fs = new fileStream(@"XMLData.bin",FileMode.Create);
       BinaryFormatter bf = new BinaryFormatter();
       bf.Serialize(fs,XMLData);
       fs.colse();
     這樣生成的二進制文件稱為XMLBinary,用WINHEX直接打開還可以看到一些XML標記在裡面,如果數據量很大,這時加一行代碼:
     XMLData.RemortingFormat = SerializationFormat.Binary;
     這時生成的文件稱為TrueBinary文件,當處理大量(超過10000行)時生成的文件尺寸是XMLBinary的幾分之一。序列化的時候會自動保存模式,這樣解序過程很簡單。我還不知道解序比直接讀取XML性能會下降多少。
   
    6. 合理利用連接池。
    連接池對性能的提高有很大的作用,默認是打開的。默認的Min Pool Size是0,一般設為一個比較小的值,如5。Max Pool Size默認是100,大多數WEB站點也夠用,大型的適當增大。

    7. 使用SQLCLR開發
    如果你是專注開SQL Server系列那你應該去研究一下SQLCLR,它的功能非常強大,在很多場合都可以提高性能(特別是大型企業級應用)。

    8. 通過靜態類來訪問APP.Config/Web.Config
    我們有很多配置信息都是放在APP.Config/Web.Config,訪問都會很頻繁,這時建立一個靜態類,所有的屬性都通過靜態類來訪問,可以在一定程度提高性能,靜態類只實例化一次,而APP.Config/Web.Config會產生很多IO操作。
    public static class MyWebConfig
{
 
  static MyWebConfig()
  {
    ConnString =
ConfigurationManager.ConnectionStrings["Connection"].
ConnectionString;
  
  }
 
  public static string DbConnectionString
  {
    get
{
      return ConnString;
    }
  }
}
 

好了 今天就寫到這裡, 有什麼錯誤和不足的地方希望指出,歡迎提出更好的意見,共同進步。

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