c#(或vb.net)程式改進,可以提高效能哦

來源:互聯網
上載者:User
1、使用實值型別的ToString方法
  在連接字串時,經常使用"+"號直接將數字添加到字串中。這種方法雖然簡單,也可以得到正確結果,但是由於涉及到不同的資料類型,數字需要通過裝箱操作轉化為參考型別才可以添加到字串中。但是裝箱操作對效能影響較大,因為在進行這類處理時,將在託管堆中分配一個新的對象,原有的值複製到新建立的對象中。
  使用實值型別的ToString方法可以避免裝箱操作,從而提高應用程式效能。
int num=1;
string str="go"+num.ToString();

2、運用StringBuilder類
  String類對象是不可改變的,對於String對象的重新賦值在本質上是重新建立了一個String對象並將新值賦予該對象,其方法ToString對效能的提高並非很顯著。
  在處理字串時,最好使用StringBuilder類,其.NET 命名空間是System.Text。該類並非建立新的對象,而是通過Append,Remove,Insert等方法直接對字串進行操作,通過ToString方法返回操作結果。
  其定義及動作陳述式如下所示:
int num;
System.Text.StringBuilder str = new System.Text.StringBuilder(); //建立字串
str.Append(num.ToString()); //添加數值num
Response.Write(str.ToString); //顯示操作結果

3、使用 HttpServerUtility.Transfer 方法在同一應用程式的頁面間重新導向
  採用 Server.Transfer 文法,在頁面中使用該方法可避免不必要的用戶端重新導向(Response.Redirect)。
4、避免使用ArrayList。
因為任何對象添加到ArrayList都要封箱為System.Object類型,從ArrayList取出資料時,要拆箱回實際的類型。建議使用自訂的集合類型代替ArrayList。asp.net 2.0提供了一個新的類型,叫泛型,這是一個強型別,使用泛型集合就可以避免了封箱和拆箱的發生,提高了效能。
5、使用HashTale代替其他字典集合類型
(如StringDictionary,NameValueCollection,HybridCollection),存放少量資料的時候可以使用HashTable.
6、為字串容器聲明常量,不要直接把字元封裝在雙引號" "裡面。
//避免
MyObject obj = new MyObject(); 
obj.Status = "ACTIVE";
//推薦
const string C_STATUS = "ACTIVE";
MyObject obj = new MyObject(); 
obj.Status = C_STATUS;
7、不要用ToUpper(),ToLower()轉換字串進行比較,用String.Compare代替,它可以忽略大小寫進行比較.
例:
const string C_VALUE = "COMPARE";
if (String.Compare(sVariable, C_VALUE, true) == 0) 

Console.Write( "相同");

也可以用str == String.Empty或者str.Length == 0判斷是否為空白。(注意判斷輸入資料的長度,可防止sql注入式攻擊)
將String對象的Length屬性與0比較是最快的方法,避免不必要的調用 ToUpper 或 ToLower 方法。
8、類型轉化Int32.TryParse()優於Int32.Parse()優於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,可以提高效能
//避免
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+ ","; 
}

10、避免在迴圈體裡聲明變數,應該在迴圈體外聲明變數,在迴圈體裡初始化。

C#程式開發要遵循的一個基本原則就是避免不必要的對象建立

//避免
for(int i=0; i<10; i++)

SomeClass objSC = new SomeClass(); 
}
//推薦
SomeClass objSC = null;
for(int i=0; i <10; i++)

objSC = new SomeClass(); 
}
11、捕獲指定的異常,不要使用通用的System.Exception.
//避免
try

<some logic>

catch(Exception exc) 

<Error handling>

//推薦 
try 

<some logic>

catch(System.NullReferenceException exc) 

<Error handling>

catch(System.ArgumentOutOfRangeException exc) 

<Error handling>

catch(System.InvalidCastException exc) 

<Error handling>
}
12、使用Try...catch...finally時, 要在finally裡釋放佔用的資源如串連,檔案流等
不然在Catch到錯誤後佔用的資源不能釋放。

try 
{} 
catch 
{} 
finally 

conntion.close(); 
}

13、不要用Exception控製程序流程
有些程式員可能會使用異常來實現一些流程式控制制。例如:
try{
result=100/num;
}
Catch(Exception e)
{
result=0;
}
但實際上,Exception是非常消耗系統效能的。除非必要,不應當使用異常控制來實現程式流程。上面的代碼應當寫為:
if(num!=0)
result=100/num;
else
result=0;

14、避免使用遞迴調用和嵌套迴圈,使用他們會嚴重影響效能,在不得不用的時候才使用。
15、禁用VB.net和Jscript動態資料類型
應當始終顯示地申明VARIANT 資料型別,這能夠節約程式的執行時間。以往,開發人員喜歡使用 Visual Basic、VBScript 和 JScript 的原因之一就是它們所謂“無類型”的性質。變數不需要顯式型別宣告,並能夠簡單地通過使用來建立它們。當從一個類型到另一個類型進行分配時,轉換將自動執行。不過,這種便利會大大損害應用程式的效能。 
如:
為了獲得最佳的效能,當聲明 JScript .NET 變數時,請為其分配一個類型。例如,var A : String;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.