`
lean1252
  • 浏览: 214706 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

tapestry4解决数据库重复读取的问题

阅读更多
最近发现程序的响应速度极其慢,然后调试发现,程序有的地方本应读取一次数据库的地方,读了好几次,这样势必造成性能上的响应问题。
造成此问题的原因,发现是由于tapestry自身的机制造成的。
下面给一点小小的源码进行对比:
重复读取数库:
public List getRecordsFromDB() {
   return "返回数据库查找到的记录集";
} 
/*在该方法里设置段点时,将查找数据库四次*/


解决方法:在Page类中定义一个变量
public List records = null;
public void pageBeginRender(PageEvent event) {
    if(records == null) {
       records = getRecordsFromDB();
    }
}
/*在getRecordsFromDB()中设置段点,将执行一次*/


public void pageEndRender(PageEvent event) {//一定要在页面显示完后进行销毁
      records = null;
}


鉴于以上示例,重复读取数据库的问题得到解决。 :-)
不知道各位还有没有什么好久解决办法,可以拿来互相探讨一下
分享到:
评论
8 楼 tapestry2008 2008-11-16  
可以在detach方法撤销对象。
7 楼 lean1252 2008-11-10  
,以后只要用到这个页面那个list的值不会发生
superaxis 写道

楼上这个代码很有问题的说。因为每个page实例从pool中取得的,你要是这样做了之后,以后只要用到这个页面那个list的值不会发生变化。

你说的对,还需要实现PageEndRenderListener接口,然后在pageEndRender方法中进行销毁。我把它加上吧。
6 楼 superaxis 2008-11-03  
楼上这个代码很有问题的说。

因为每个page实例从pool中取得的,你要是这样做了之后,以后只要用到这个页面那个list的值不会发生变化。
5 楼 linsy 2008-10-15  
设成属性也可,因为变量还要在initilaze()中清空。
否则变量值会一直存在。不知我讲的正不正确?
4 楼 lean1252 2008-10-09  
hanfengmvp 写道

其实我到不觉的这个是什么问题,数据量大慢一点就慢一点吧,如果你让数据第一次读取进来作为list缓存,数据得不到实时的更新,这样带来带来的统计会不会不准确?

我想你误解我的意思了,我的本意是解决其向数据库重复读取的问题。:-)
3 楼 hanfengmvp 2008-10-05  
其实我到不觉的这个是什么问题,数据量大慢一点就慢一点吧,如果你让数据第一次读取进来作为list缓存,数据得不到实时的更新,这样带来带来的统计会不会不准确?
2 楼 lean1252 2008-09-15  
谢谢你的建议,我去试试:)
1 楼 tapestry 2008-09-14  
使用Tacos的@Cached

相关推荐

Global site tag (gtag.js) - Google Analytics