0

paging的性能优化

asked 2008-10-13 22:24:24 +0800

annbaby gravatar image annbaby
51

updated 2008-10-13 22:25:51 +0800

public class Paging extends AbstractList<String> {

private List<String> list;
private int size = 0;

public Paging(WebApp application) {

//判断WebApp中是否已经存在了要调用的数据
if(application.getAttribute("list")==null){
list=getList();
application.setAttribute("list", list);//加入WebApp中
}else{
//判断数据是否过期
if(application.getAttribute("data_flag").equals("true")){
list=(List)application.getAttribute("list");
}else if(application.getAttribute("data_flag").equals("false")){
//过期数据就重新调用一次,并把对象保存在WebApp中
list=getList();
application.setAttribute("list", list);
}
}
size=list.size();
}
//生成1000条测试数据
public List<String> getList() {
if (list == null)
list = new ArrayList<String>();
for (int i = 0; i < 1000; i++) {
list.add("" + i);
System.out.println(i);
}
return list;
}

@Override
public String get(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}

@Override
public int size() {
// TODO Auto-generated method stub
return size;
}

如果用paging分页的话,我想大家也对大数据量读取敢感到空或,要是自己去写分页又很麻烦,所以我就想到了这个解决办法,这样可以减少数据的读取次数

也能加快访问速度,应为保存在WebApp中的对象是在内存当中,所以在第二次读取的时候就可以从内存中取,而不是在去读取数据库数据了。这样就可以大大

的优化paging的性能了。

为了保证不读取过期数据,所以在读取WebApp中的存放的Object时,加了一个判断。

只要大家在update,insert,delete操作中把data_flag改为false,让数据重新读取一次就可以了。

毕竟update,insert,delete操作比起select要少的多。要是数据量很大的话,为了不消耗太多的内存,也可以把对象序列化到磁盘上。

要是很注重性能的话,最好还是动态的去添加页面数据。

我很喜欢zk希望可以和大家一起分享。

delete flag offensive retag edit
Be the first one to reply this discussion!
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2008-10-13 22:24:24 +0800

Seen: 897 times

Last updated: Oct 13 '08

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More