作者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/cn.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