Foxtable(狐表)用户栏目专家坐堂 → 执行速度很慢,请老师优化!


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

主题:执行速度很慢,请老师优化!

帅哥哟,离线,有人找我吗?
20090530
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:55 积分:626 威望:0 精华:0 注册:2010/7/11 23:30:00
执行速度很慢,请老师优化!  发帖心情 Post By:2011/11/8 17:09:00 [只看该作者]

烦请优化:

 

If (e.DataCol.name="文化程度" Or e.DataCol.name="等级" Or e.DataCol.name="专业") And e.DataRow("姓名")<>Nothing
With  DataTables("人员基本信息表")
.ReplaceFor("文化程度1", 0,"[姓名]<>'  '")
      .ReplaceFor("文化程度1", 12,"[文化程度] = 'AA'")
      .ReplaceFor("文化程度1", 10,"[文化程度] = 'AB'")
      .ReplaceFor("文化程度1", 8,"[文化程度] = 'CCC'")
      .ReplaceFor("文化程度1", 6,"[文化程度] = 'VF'")
      .ReplaceFor("文化程度1", 6,"[文化程度] = 'AK'")
      .ReplaceFor("文化程度1", 4,"[文化程度] = 'BK'")
      .ReplaceFor("文化程度1", 0,"[文化程度] = 'CZ'")
      .ReplaceFor("文化程度1", 0,"[文化程度] = 'XX'")

.ReplaceFor("等级1", 0,"[姓名]<>'  '")
      .ReplaceFor("等级1", 13,"[等级] = 'A'")
      .ReplaceFor("等级1", 10,"[等级] = 'B'")
      .ReplaceFor("等级1", 8,"[等级] = 'C'")
      .ReplaceFor("等级1", 6,"[等级] = 'D'")

.ReplaceFor("专业1", 0,"[姓名]<>'  '")
      .ReplaceFor("专业1", 12,"[专业] = 'AA'")
      .ReplaceFor("专业1", 10,"[专业] = 'BB'")
      .ReplaceFor("专业1", 6,"[专业] = 'CC'")

End With

Dim dr As DataRow=e.DataRow
dr("maxl")=math.max(math.max(dr("专业1"),dr("等级1")),dr("文化程度1"))

End If

 

慢的原因是?谢谢!


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/8 17:13:00 [只看该作者]

传表,说明设计目的设计思路。

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


加好友 发短信
等级:婴狐 帖子:55 积分:626 威望:0 精华:0 注册:2010/7/11 23:30:00
  发帖心情 Post By:2011/11/8 17:39:00 [只看该作者]

根据文化程度、等级、专业的分类赋予文化程度1、等级1、专业1相应的值,并求出文化程度1、等级1、专业1的最大值。谢谢!

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2011/11/8 17:49:00 [只看该作者]

最好上传文件,换思路也许更好,这样重复地执行ReplaceFor不如遍历所有行,最好是看看RaiseDataColChanged这样应该更快,搞不定的话上传文件!

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


加好友 发短信
等级:等待验证 帖子:386 积分:2482 威望:0 精华:1 注册:2011/5/10 11:13:00
  发帖心情 Post By:2011/11/8 18:07:00 [只看该作者]

這樣的設計,慢是必然的:相應每一行的變化,都要更新全表(其實只更新變化的行就行)!

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


加好友 发短信
等级:婴狐 帖子:55 积分:626 威望:0 精华:0 注册:2010/7/11 23:30:00
  发帖心情 Post By:2011/11/8 19:06:00 [只看该作者]

以下是引用20090530在2011-11-8 17:39:00的发言:
根据文化程度、等级、专业的分类赋予文化程度1、等级1、专业1相应的值,并求出文化程度1、等级1、专业1的最大值。谢谢!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:863.table


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/9 8:06:00 [只看该作者]

感觉你是怎么慢就怎么来,你这样写,速度比正常速度慢了何止千倍万倍。

下面是正常的代码:

 

Select Case e.DataCol.Name
    Case "文化程度"
        Select Case e.NewValue
            Case "CZ","XX"
                e.DataRow("文化程度1") = 0
            Case "AA"
                e.DataRow("文化程度1") = 12
            Case "AB"
                e.DataRow("文化程度1") = 10
            Case "CCC"
                e.DataRow("文化程度1") = 8
            Case "VF" ,"AK"
                e.DataRow("文化程度1") = 6
            Case "BK"
                e.DataRow("文化程度1") = 4
        End Select
    Case "等级"
        Select Case e.NewValue
            Case "A"
                e.DataRow("等级1") = 13
            Case "B"
                e.DataRow("等级1") = 10
            Case "C"
                e.DataRow("等级1") = 8
            Case "D"
                e.DataRow("等级1") = 6
        End Select
    Case "专业"
        Select Case e.NewValue
            Case "AA"
                e.DataRow("专业1") = 12
            Case "BB"
                e.DataRow("专业1") = 10
            Case "CC"
                e.DataRow("专业1") = 6
        End Select
End Select
If (e.DataCol.name="文化程度" Or e.DataCol.name="等级" Or e.DataCol.name="专业") And e.DataRow.IsNull("姓名") = False Then
    Dim dr As DataRow = e.DataRow
    dr("maxl")=math.max(math.max(dr("专业1"),dr("等级1")),dr("文化程度1"))
End If

 

建议你细看开发指南中的《编程基础》和《foxtable编程》这两章,当然《使用指南》也必须看透,因为会用是开发的基础。

[此贴子已经被作者于2011-11-9 8:08:19编辑过]

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


加好友 发短信
等级:婴狐 帖子:55 积分:626 威望:0 精华:0 注册:2010/7/11 23:30:00
  发帖心情 Post By:2011/11/9 8:06:00 [只看该作者]

附件如下
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:863.table


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/9 8:09:00 [只看该作者]

看7楼

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


加好友 发短信
等级:婴狐 帖子:55 积分:626 威望:0 精华:0 注册:2010/7/11 23:30:00
  发帖心情 Post By:2011/11/9 8:18:00 [只看该作者]

您的是很快,我当初也用select case就是没您的简化:

 

If (e.DataCol.name="xl" Or e.DataCol.name="dj" Or e.DataCol.name="zc") And e.DataRow("xm") <> Nothing
  Dim dr As String
  dr= trim(e.DataRow("xl"))

  Dim dj As String
  dj= trim(e.DataRow("dj"))

  Dim zc As String
  zc= trim(e.DataRow("zc"))

  Dim pp As DataRow=e.DataRow

  Select Case dr
    Case "高中"
      e.DataRow("xl1")=1
    Case "初中"
      e.DataRow("xl1")=2
    Case Else
      e.DataRow("xl1")=0
  End Select

  Select Case dj
    Case "高级"
      e.DataRow("dj1")=1
    Case "初中"
      e.DataRow("dj1")=2
    Case Else
      e.DataRow("dj1")=0
  End Select

  Select Case zc
    Case "高级"
      e.DataRow("zc1")=1
    Case "初中"
      e.DataRow("zc1")=2
    Case Else
    e.DataRow("zc1")=0
  End Select

pp("maxl") = math.max( math.max(pp("xl1"),pp("dj1")),pp("zc1"))
End If

 

 

因记录少,没比较速度,我后面想replacefor 类似于foxpro的replace,就改用了replacefor ,请教速度慢的原因?


 回到顶部
总数 11 1 2 下一页