1、使用泛型來避免裝箱、拆箱操作。
裝箱操作會造成gc壓力;如果發生在集合中,應該使用泛型集合避免。
對於值型別的集合,使用list來代替arraylist,使用dictionary來代替hashtable。
arraylist h=new arraylist(); //不建議
h.add(1);
listh = new list(); //不建議
h.add(1);
listh = new list(); //建議
h.add(1);
2、使用string.empty給乙個空字串變數賦初始值
string.empty是乙個指代,而」」是具體的實現
string filter=「」;//不建議
stringfilter=string.empty; //建議
3、stringbuilder進行字串拼接操作
如果要構造乙個較長的字串,尤其是拼接超過10次時(經驗值),應使用stringbuilder做字串拼接操作
//不建議:
string s = null;
for (int i = 0; i < 10000; i++)
//建議:
stringbuilder sb = new stringbuilder();
for (int i = 0; i < 10000; i++)
string t = sb.tostring();
4、建立stringbuilder應指定初始大小
預設的初始大小為16,一旦超過即需要resize一次並增加gc壓力。建議根據經驗值為其指定初始大小。
stringbuilder sb = new stringbuilder();
for (int i = 0; i < 10; i++)
string s = sb.tostring();
//建議修改為
stringbuilder sb = new stringbuilder(256);
for (int i = 0; i < 10; i++)
string s = sb.tostring();
5、避免濫用stringbuilder(注意,但還沒有用過)
類似str1+str2+str3+str4的字串拼接操作會被編譯為string.concat(str1,str2,str3,str4),效率反而高於stringbuilder。string.concat會一次性確定字串長度,stringbuilder需要做resize,適用於多次生成string物件的情況。
通過直接設定.length=0來初始化stringbuilder。
根據實驗結果,多次使用同一stringbuilder物件時,通過直接設定.length=0來初始化速度最快。
stringbuiler sb = new stringbuilder(256);
......
sb.remove(0, sb.length); //不建議
sb.length = 0; //建議
6、複雜值型別變數作為引數時,使用引用方式可提公升效率
值型別從呼叫棧分配,引用型別從託管堆分配。當值型別用作方法引數時,缺省會進行引數值複製。
//不建議
static void printdatetime(datetime dt)
//建議
static void printdatetime(ref datetime dt)
7、使用itemarray實現對datarow的批量賦值
在對datarow的所有字段賦值時,使用欄位名進行逐列賦值效率較低。這時應盡量使用批量字段賦值。
可以使用itemarray或rows.add方法:
// ds是資料集(dataset)物件
datatable dt = ds.tables[0];
datarow row = dt.newrow();
row.itemarray = new object ;
// ds是資料集(dataset)物件
datatable dt = ds.tables[0];
dt.rows.add(value1, value2, …, valuen);
應避免做大量連續的單列賦值,如下:
datatable dt = ds.tables[0];
datarow row = dt.newrow();
row["col1"] = value1;
row["col2"] = value2;
…row["coln"] = valuen;
8、合理使用datatable的平行計算
datatable內建的平行計算可以充分利用電腦的每個cpu,起到優化效率的作用。
ienumerablefindrows() //查詢所有數量小於0的分錄
ienumerablefindrows() //查詢所有數量小於0的分錄
根據實驗,當對datatable的行選擇時平行計算優於select和迴圈過濾等方式;當進行行遍歷時效能類似。
9、使用importrow實現向同結構datatable合併
使用merge方法可以很方便的實現datatable的合併,但merge的效率卻非常差**。示例如下:
datatable srctables= ... ;
foreach(datatable src in srctables)
importrow也可以實現datatable的合併操作,效能相比merge要高很多。**示例如下:
datatable srctables = ... ;
foreach(datatable src in srctables )
}
10、 效能優化 開發規範和優化 細節
sql 1.sql顯示內連線代替隱式內連線 2.sql引數查詢,sql函式不要作用於列,把引數格式化去匹配,3.sql查詢避免用 號,用具體的列表示,籠統,模糊的概念不利於程式閱讀,維護,具體化,細節化。4.mybatis介面引數少於5個,不用物件類,1.一方面介面引數一目了然,方面別人復用 2.減...
C 字串操作 效能優化細節
c 效能優化細節 1 使用string.empty給乙個空字串變數賦初始值 2 使用str.length 0做空串比較 3 避免不必要的字串toupper tolower類操作 4 巧用stringbuilder進行字串拼接操作 5 建立stringbuilder應指定初始大小 6 避免濫用stri...
C 效能優化 優化模式
1.預計算 可以在程式早期,例如設計時 編譯時或是鏈結時,通過在熱點 前執行計算來將計算從熱點部分中移除。2.延遲計算 通過在真正需要執行計算時才執行計算,可以將計算從某些 路徑上移除。3.批量處理 每次對多個元素一起進行計算,而不是一次只對乙個元素進行計算。4.快取 通過儲存和復用昂貴計算的結果來...