当前位置: 代码迷 >> PB >> 遇到个纠结的有关问题,行数多了(六七百行)速度很慢,按理说与行数没关系的
  详细解决方案

遇到个纠结的有关问题,行数多了(六七百行)速度很慢,按理说与行数没关系的

热度:21   发布时间:2016-04-29 10:11:31.0
遇到个纠结的问题,行数多了(六七百行)速度很慢,按理说与行数没关系的
根据身份证号自动计算生日和性别的功能,dw的 itemchanged事件,
行数多了(六七百条)速度很慢,要六七秒的时间,多一百条数据就多一秒钟,如果是指几十行数据就感觉不出来。按理说与数据条数是没关系的,以下是源码, 大家帮忙看看,也不是很高深的问题:

VB code
case "身份证号"        //this.acceptText ()        setPointer(HourGlass!)        string    ls_data        string    ls_xb //性别        datetime ldt_bir //生日        ls_data = trim(data)        if  len(trim(ls_data)) <> 18 and  len(trim(ls_data)) <> 15 then            messageBox ('提示', '身份证号必须为18位或15位', stopSign!)            return        end if        //wf_cal_idcar (row ,data)    //自动计算生日,性别                choose case len(ls_data)             case    18                ls_temp = mid(ls_data, 7, 4) + '-' + mid(ls_data, 11, 2) + '-' + mid(ls_data, 13, 2)                 ldt_bir = datetime (date(ls_temp))                            if mod(long(mid(ls_data, 17, 1)),2) =1 then                     ls_xb =  '男'                else                    ls_xb =  '女'                end if            case    15                 ls_temp = mid(ls_data, 7, 2) + '-' + mid(ls_data, 9, 2) + '-' + mid(ls_data, 11, 2)                 ldt_bir = datetime (date(ls_temp))                //messageBox (ls_temp, string(ldt_bir) )        end choose            setItem (row, '出生日期', ldt_bir)        setITem(row, '性别', ls_xb)


------解决方案--------------------
问题不是出在这儿,把你的QQ贴上来,帮你远程看一下,应该是rowfocuschanged之类的地方重复调用了一些代码
------解决方案--------------------
case "身份证号"
//在这个位置记录一下cpu
long ll_cpu
ll_cpu = cpu()
//this.acceptText ()
setPointer(HourGlass!)
string ls_data
string ls_xb //性别
datetime ldt_bir //生日
ls_data = trim(data)
if len(trim(ls_data)) <> 18 and len(trim(ls_data)) <> 15 then
messageBox ('提示', '身份证号必须为18位或15位', stopSign!)
return
end if
//wf_cal_idcar (row ,data) //自动计算生日,性别

choose case len(ls_data) 
case 18
ls_temp = mid(ls_data, 7, 4) + '-' + mid(ls_data, 11, 2) + '-' + mid(ls_data, 13, 2) 
ldt_bir = datetime (date(ls_temp))
if mod(long(mid(ls_data, 17, 1)),2) =1 then 
ls_xb = '男'
else
ls_xb = '女'
end if
case 15 
ls_temp = mid(ls_data, 7, 2) + '-' + mid(ls_data, 9, 2) + '-' + mid(ls_data, 11, 2) 
ldt_bir = datetime (date(ls_temp))
//messageBox (ls_temp, string(ldt_bir) )
end choose
setItem (row, '出生日期', ldt_bir)
setITem(row, '性别', ls_xb)

//在这个位置看一下执行的时间(毫秒)
messagebox('', cpu() - ll_cpu)
------解决方案--------------------
这个确实不会影响,影响的肯定是其他的,你试着把这段代码写成
case "身份证号"
string ls
ls = ''

看看,速度如何
------解决方案--------------------
应该不是这段代码造成速度慢!
------解决方案--------------------
你最好设置断点调试一下,这样更容易找出慢在哪里
按你这种说法,肯定有哪个地方的代码需要遍历到所有行
------解决方案--------------------
你把我在3楼写的代码执行一下,看一下运行的时间
------解决方案--------------------
那你跟踪一下执行哪句代码时比较慢
------解决方案--------------------
探讨
  相关解决方案