Foxtable(狐表)用户栏目专家坐堂 → 令人目瞪口呆的效率差别(有修正)


  共有42879人关注过本帖树形打印复制链接

主题:令人目瞪口呆的效率差别(有修正)

帅哥哟,离线,有人找我吗?
狐狸爸爸
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/7 22:09:00 [只看该作者]

Dictionary帮助中有的:

 

http://help.foxtable.com/topics/1945.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
hnaysx
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:44 积分:903 威望:0 精华:0 注册:2010/9/17 21:54:00
  发帖心情 Post By:2010/12/7 22:20:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
hnaysx
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:44 积分:903 威望:0 精华:0 注册:2010/9/17 21:54:00
  发帖心情 Post By:2010/12/7 22:22:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
mr725
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/12/7 22:27:00 [只看该作者]

帮助中的:

字典

一般用户可以忽略本节内容,因为字典在Foxtable中的使用场合并不多。

Dictionary表示键与值的集合,俗称字典。

 

这个【一般用户可以忽略本节内容】应该改一改:一般用户要重视本节内容。 

要不C版也是这两天才研究的啊,连C版都忽略了,何况咱等,呵呵~


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/7 22:58:00 [只看该作者]

呵呵,其实真的没啥用的,一楼的问题,一般人也遇不到。

 


 回到顶部
帅哥哟,离线,有人找我吗?
hnaysx
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:44 积分:903 威望:0 精华:0 注册:2010/9/17 21:54:00
  发帖心情 Post By:2010/12/7 22:59:00 [只看该作者]

用户已被锁定

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/7 23:13:00 [只看该作者]

以下是引用hnaysx在2010-12-7 22:59:00的发言:
关键我这里测试不出来你所的200多秒

 

那就比较一下这两段吧

 

第一段:

 

Dim v As Double
For Each
dr As DataRow In DataTables("表A").DataRows
    v
= DataTables("表A").Compute("Count(第二列 )", "第二列 = " & dr("第一列"))
   
dr("第四列") = v

Next

 

第二段:

 

Dim Dic As new Dictionary(of DataRow, Integer)
Dim
v As Double

For Each
dr As DataRow In DataTables("表A").DataRows
    v = DataTables("表A").Compute("Count(第二列 )", "第二列 = " & dr("第一列"))

    dic
.Add(dr, v
)
Next
For Each
dr As DataRow In dic.
Keys
   
dr("第四列") = dic(dr
)
Next


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/7 23:53:00 [只看该作者]

其实这是ado.net的一个bug或不足,下面两段代码,和Foxtable没有关系,第二段还是比第一段快上百倍:

 

第一段:

 

Dim t As New Data.DataTable
Dim r As Data.DataRow
t.Columns.Add("第一列",Gettype(Integer))
t.Columns.Add("第二列",Gettype(Integer))
t.Columns.Add("第三列",Gettype(Boolean))
For i As Integer = 0 To 10000
    r = t.NewRow()
    r("第一列") = rand.Next(1,30000)
    r("第二列") = rand.Next(1,30000)
    t.Rows.Add(r)
Next
Dim tm As Date = Date.Now
For Each r In t.Rows
    If t.Select("第二列 = " & r("第一列")).Length > 0 Then
        r("第三列") = True
    Else
        r("第三列") = False
    End If
Next
output.show((Date.Now - tm).TotalSeconds)


 

第二段:

 

Dim t As New Data.DataTable
Dim r As Data.DataRow
Dim l1 As New List(of Data.DataRow)
Dim l2 As New List(of Data.DataRow)
t.Columns.Add("第一列",Gettype(Integer))
t.Columns.Add("第二列",Gettype(Integer))
t.Columns.Add("第三列",Gettype(Boolean))
For i As Integer = 0 To 10000
    r = t.NewRow()
    r("第一列") = rand.Next(1,30000)
    r("第二列") = rand.Next(1,30000)
    t.Rows.Add(r)
Next
Dim tm As Date = Date.Now
For Each r In t.Rows
    If t.Select("第二列 = " & r("第一列")).Length > 0 Then
        l1.Add(r)     
    Else
        l2.Add(r)
    End If
Next
For Each r In l1
    r("第三列") = True
Next
For Each r In l2
    r("第三列") = False
Next
output.show((Date.Now - tm).TotalSeconds)

 

[此贴子已经被作者于2010-12-7 23:52:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  29楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57584 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2010/12/8 8:22:00 [只看该作者]

以下是引用hnaysx在2010-12-7 22:20:00的发言:

测试这个代码

时间

 

计算结束, 耗时: 1.921875秒

 

Dim t1 As Date = Date.Now
For Each dr As DataRow In DataTables("表A").DataRows
    If DataTables("表A").Find("第二列 = " & dr("第一列") ) Is Nothing Then
        dr("第三列") = True
    Else
        dr("第三列") = False
    End If
Next
Output.Show("计算结束, 耗时: " & (Date.Now - t1).TotalSeconds & "秒")

  每次都没有反应.


 回到顶部
帅哥哟,离线,有人找我吗?
易服
  30楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:787 积分:6349 威望:0 精华:0 注册:2008/9/1 8:26:00
  发帖心情 Post By:2010/12/8 9:46:00 [只看该作者]

以下是引用czy在2010-12-7 19:22:00的发言:
搞不明白,16楼的代码的确不存在两种代码效率上大的差异。

新代码

 
图片点击可在新窗口打开查看此主题相关图片如下:2010-12-8 9-34-37.png
图片点击可在新窗口打开查看
旧代码


图片点击可在新窗口打开查看此主题相关图片如下:2010-12-8 9-40-55.png
图片点击可在新窗口打开查看
差别不大,大约10秒

[此贴子已经被作者于2010-12-8 9:47:40编辑过]

 回到顶部
总数 96 上一页 1 2 3 4 5 6 7 8 9 10 下一页