DataTable 數據量大時,導致內存溢出的解決方案



/// <summary> /// 分解數據表 /// </summary> /// <param name="originalTab">需要分解的表</param> /// <param name="rowsNum">每個表包含的數據量</param> /// <returns></returns> public DataSet SplitDataTable(DataTable originalTab, int rowsNum) { //獲取所需創建的表數量 int tableNum = originalTab.Rows.Count / rowsNum; //獲取數據余數 int remainder = originalTab.Rows.Count % rowsNum; DataSet ds = new DataSet(); //如果只需要創建1個表,直接將原始表存入DataSet if (tableNum == 0) { ds.Tables.Add(originalTab); } else { DataTable[] tableSlice = new DataTable[tableNum]; //Save orginal columns into new table. for (int c = 0; c < tableNum; c++) { tableSlice[c] = new DataTable(); foreach (DataColumn dc in originalTab.Columns) { tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType); } } //Import Rows for (int i = 0; i < tableNum; i++) { // if the current table is not the last one if (i != tableNum - 1) { for (int j = i * rowsNum; j < ((i + 1) * rowsNum); j++) { tableSlice[i].ImportRow(originalTab.Rows[j]); } } else { for (int k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++) { tableSlice[i].ImportRow(originalTab.Rows[k]); } } } //add all tables into a dataset foreach (DataTable dt in tableSlice) { ds.Tables.Add(dt); } } return ds;

另外,注意程序使用64位編譯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM