專案中需要讀取資料庫中的多張表。由於表的資料比較多,序列讀取時耗時比較多,所以對程式做了一點優化。
環境.net 3.5,sql server 2012,visual studio 2015
過程專案中使用儲存過程序列地讀取資料庫,儲存過程接受同乙個表變數作為引數。但是當在多執行緒中複製datatable時有可能會出現異常,這是因為datatable裡的rows不是執行緒安全的。不過微軟提供了乙個叫syncroot的物件幫助我們在多執行緒時對datatable進行操作。**如下
public static myobject getdata(datatable datatable)
}readfromdatabase(temptable);
// write your own code.
return myobject;
}
多執行緒下的使用方法如下
public static void test()
);// start a new thread.
thread.start();
// wait this thread terminated.
thread.join();
}
可以改進的地方
呼叫 thread.join() 時會阻塞當前執行緒,直到thread結束。某些情況還是會影響一部分效能的。
.net 4.0以上提供了更加簡便的非同步操作和執行緒安全的資料結構。但是由於現有的專案是使用 .net 3.5寫的,暫時也沒有辦法重構了
reference
DataTable多執行緒操作報錯情況
最近在寫乙個http介面時用了datatable這個強大的利器,介面用瀏覽器跑起來沒任何問題。當時也沒考慮併發問題,後來用乙個壓力測試工具做大併發測試,1000 s次速度測試。發現程式報錯了。程式報錯了第一反應還是去檢查 是不是 出現問題。發現邏輯都是對的,然後用瀏覽器開啟介面,發現一切ok 然後心...
c 多執行緒訪問介面
c 2005後不再支援多執行緒直接訪問介面的控制項 介面建立執行緒與訪問執行緒不是同乙個執行緒 不過可以使用delegate來解決 2.定義執行緒函式 在另乙個執行緒中可以對介面控制項進讀操作 view plaincopy to clipboardprint?private void progres...
二 多執行緒併發訪問
非執行緒安全是多個執行緒對同乙個物件中的例項變數進行併發訪問時發生的,取到的資料其實是被更改過的。而執行緒安全就是以獲得的例項變數的值是經過同步處理的 1.synchronized同步方法 只有共享資源的讀寫訪問需要同步化 1.出現異常,鎖會自動釋放 2.同步不具有繼承性 1 方法內的變數執行緒安全...