Re: [.NET] 把dataTable 變成 string(0
※ 引述《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
→
11/26 11:46, , 1F
11/26 11:46, 1F
→
11/26 12:06, , 2F
11/26 12:06, 2F
推
11/26 16:32, , 3F
11/26 16:32, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Visual_Basic 近期熱門文章
PTT數位生活區 即時熱門文章