看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《wind681201 (阿風~~)》之銘言: : 請輸入專案類型(網站專案或者應用程式專案):asp.net : 想請問大大:我想用datatable 裡面的一個欄位,轉成 string() : 怎麼做比較快?效能比較好呢? : 我現在是用迴圈的方式去加,但這樣效能很不好。 : 我的datatable會先用select選出要的datarow,然後我只要裡面其中一個欄位 : 把欄位的值,轉成字串陣列 String() 。 以下是你想要做的事嗎? 測試環境:.NET Framework 4.5.1 Dim st As Date '方法1 Linq to DataTable st = Date.Now Dim ValueList1 As String() = ( From a In dt.AsEnumerable() Select column2 = a("column2").ToString() ).ToArray() Response.Write(Date.Now.Subtract(st).Milliseconds & "<br />") '方法2 填入字串陣列,使用 For 迴圈 st = Date.Now Dim ValueList2 As String() = New String(dt.Rows.Count - 1) {} For i As Integer = 0 To dt.Rows.Count - 1 ValueList2(i) = dt.Rows(i)("column2").ToString() Next Response.Write(Date.Now.Subtract(st).Milliseconds & "<br />") '方法3 填入字串陣列,使用 For Each 迴圈 st = Date.Now Dim ValueList3 As String() = New String(dt.Rows.Count - 1) {} Dim Index As Integer = 0 For Each Row As DataRow In dt.Rows ValueList3(Index) = Row("column2").ToString() Index += 1 Next Response.Write(Date.Now.Subtract(st).Milliseconds & "<br />") '方法4 填入 List 泛型,使用 For Each 迴圈 st = Date.Now Dim StringList As New List(Of String) For Each Row As DataRow In dt.Rows StringList.Add(Row("column2").ToString()) Next Dim ValueList4 As String() = StringList.ToArray() Response.Write(Date.Now.Subtract(st).Milliseconds & "<br />") --- 測試資料:200萬個資料列 執行結果:(單位毫秒,測試n次,取其中2次) (1) 301 616 182 189 (2) 288 660 178 308 其中方法3最快,執行時間也最穩定,方法4的執行時間變動幅度最大 -- 携帯の待ち受けには 笑顔のMai-Kがいる -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.77.137 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1480086845.A.563.html ※ 編輯: fumizuki (123.194.77.137), 11/25/2016 23:14:32
MOONRAKER: 現在不用StringBuilder了嗎 11/26 11:46
fumizuki: 因為目標是字串陣列,所以沒使用 StringBuilder 11/26 12:06
wind681201: 對,謝謝你,我會用方式一這一個,比較適合我 11/26 16:32