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