使用值類型的ToString方法
在連接字符串時 經常使用 + 號直接將數字添加到字符串中 這種方法雖然簡單 也可以得到正確結果 但是由於涉及到不同的數據類型 數字需要通過裝箱操作轉化為引用類型才可以添加到字符串中 但是裝箱操作對性能影響較大 因為在進行這類處理時 將在托管堆中分配壹個新的對象 原有的值復制到新創建的對象中
使用值類型的ToString方法可以避免裝箱操作 從而提高應用程序性能
int num= ;
string str= go +num ToString();
運用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); //顯示操作結果
使用 HttpServerUtility Transfer 方法在同壹應用程序的頁面間重定向
采用 Server Transfer 語法 在頁面中使用該方法可避免不必要的客戶端重定向(Response Redirect)
避免使用ArrayList
因為任何對象添加到ArrayList都要封箱為System Object類型 從ArrayList取出數據時 要拆箱回實際的類型 建議使用自定義的集合類型代替ArrayList 提供了壹個新的類型 叫泛型 這是壹個強類型 使用泛型集合就可以避免了封箱和拆箱的發生 提高了性能
使用HashTale代替其他字典集合類型
(如StringDictionary NameValueCollection HybridCollection) 存放少量數據的時候可以使用HashTable
為字符串容器聲明常量 不要直接把字符封裝在雙引號 裏面
//避免
MyObject obj = new MyObject();
obj Status = ACTIVE ;
//推薦
const string C_STATUS = ACTIVE ;
MyObject obj = new MyObject();
obj Status = C_STATUS;
不要用ToUpper() ToLower()轉換字符串進行比較 用String Compare代替 它可以忽略大小寫進行比較
例
const string C_VALUE = PARE ;
if (String Compare(sVariable C_VALUE true) == )
{
Console Write( 相同 );
}
也可以用str == String Empty或者str Length == 判斷是否為空 (註意判斷輸入數據的長度 可防止sql註入式攻擊)
將String對象的Length屬性與 比較是最快的方法 避免不必要的調用 ToUpper 或 ToLower 方法
類型轉化Int TryParse()優於Int Parse()優於Convert ToInt ()
建議 NET 下用Int Parse() NET 用Int TryParse()
因為
Convert ToInt 會把最終的解析工作代理給 Int Parse
Int Parse 會把最終的解析工作代理給Number ParseInt
Int TryParse 會把最終的解析工作代理給Number TryParseInt
如果只是從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+ ;
}
避免在循環體裏聲明變量 應該在循環體外聲明變量 在循環體裏初始化
C#程序開發要遵循的壹個基本原則就是避免不必要的對象創建
//避免
for(int i= ; i< ; i++)
{
SomeClass objSC = new SomeClass();
}
//推薦
SomeClass objSC = null;
for(int i= ; i < ; i++)
{
objSC = new SomeClass();
}
捕獲指定的異常 不要使用通用的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>
}
使用Try catch finally時 要在finally裏釋放占用的資源如連接 文件流等
不然在Catch到錯誤後占用的資源不能釋放
try
{}
catch
{}
finally
{
conntion close();
}
不要用Exception控制程序流程
有些程序員可能會使用異常來實現壹些流程控制 例如
try{
result= /num;
}
Catch(Exception e)
{
result= ;
}
但實際上 Exception是非常消耗系統性能的 除非必要 不應當使用異常控制來實現程序流程 上面的代碼應當寫為
if(num!= )
result= /num;
else
result= ;
避免使用遞歸調用和嵌套循環 使用他們會嚴重影響性能 在不得不用的時候才使用
禁用和Jscript動態數據類型
應當始終顯示地申明變量數據類型 這能夠節約程序的執行時間 以往 開發人員喜歡使用 Visual Basic VBScript 和 JScript 的原因之壹就是它們所謂 無類型 的性質 變量不需要顯式類型聲明 並能夠簡單地通過使用來創建它們 當從壹個類型到另壹個類型進行分配時 轉換將自動執行 不過 這種便利會大大損害應用程序的性能
如
lishixinzhi/Article/program/net/201311/13198