作者fumizuki (矇面加菲獅)
看板Visual_Basic
標題Re: [.NET] 把dataTable 變成 string(0
時間Fri Nov 25 23:14:03 2016
※ 引述《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://webptt.com/m.aspx?n=bbs/Visual_Basic/M.1480086845.A.563.html
※ 編輯: fumizuki (123.194.77.137), 11/25/2016 23:14:32
1F:→ MOONRAKER: 現在不用StringBuilder了嗎 11/26 11:46
2F:→ fumizuki: 因為目標是字串陣列,所以沒使用 StringBuilder 11/26 12:06
3F:推 wind681201: 對,謝謝你,我會用方式一這一個,比較適合我 11/26 16:32