C 效能優化細節

2021-08-27 16:42:12 字數 3070 閱讀 3611

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.快取 通過儲存和復用昂貴計算的結果來...