CNET中国旗舰网站

ZDNet China | CNET科技资讯网 | 政府采购 | 行业网站联盟




 
标题: [转贴] 请注意数据窗口的rowfocuschanging事件
hyshi
明星会员
Rank: 11Rank: 11Rank: 11Rank: 11



UID 254160
精华 5
积分 24050
帖子 2066
威望 11470
ZD币 3012 元
阅读权限 230
注册 2007-10-10
状态 离线
  楼主
发表于 2007-11-14 15:11  资料  个人空间  短消息  加为好友 
开发者在线

请注意数据窗口的rowfocuschanging事件

问题表现:
         一个数据窗口,检索之后,表现出类似死机的状态。
   解决问题过程:
         经过分析源代码,发现其检索的原理很简单,就是将一个数据窗口数据检索出来,然后作一个循环,删除数量为0的数据。
      开始,编这个程序的程序员认为是sql执行效率的问题。但我认为数据库数据只有几十万,就算没有索引,其速度应当也是在可容忍范围之内的。
      仔细分析,发现数据窗口中有一个计算列,计算列中有一个函数。该函数中有一个sql语句。分析该sql,发现其速度也很快。
     做一个demo,直接retrieve该数据窗口,发现速度很快。
      然后在demo中写一段循环语句,发现该循环执行的很慢。(数据窗口只有几百条记录)
分析:
      数据窗口的计算列计算过程应该在数据行改变之后。比如,数据窗口有10行,删除一行,该函数执行9遍,再删一行,函数又执行8遍。。。。以此类推,数据窗口不停的执行sql语句,导致程序执行时,表现出类似死机的状态。
解决方案:
方案一、不要在数据窗口计算列中放函数,通过程序调用函数,计算好数值,然后写到数据窗口。这样,数据窗口删除行时,不会出发该函数。
方案二、不要用循环删除行,直接用过滤,这样最多是过滤之后,过滤剩下的行执行一遍该函数。




顶部
热点频道推荐: C/S开发| 数据库| WEB开发| 嵌入式| 项目管理|
 



当前时区 GMT+8, 现在时间是 2008-11-22 07:02

  Powered by Discuz! 5.5.0 © 2001-2007 Comsenz Inc.
Processed in 0.177406 second(s), 4/4 queries

清除 Cookies - 联系我们 - ZDNetChina中文社区 - 无图版