- 论坛徽章:
- 0
|
做一个分页的例子,运行成功,但是速度是非常的慢,我在50000条数据中做分页,每页大小才20,
但是每查询一次好像要48875ms,基本上属于不可用的状态。
服务器环境是sun one directory server 5.2 ,win2003,
暂时不知道是什么原因,导致慢,因为就算我把50000条记录全部输出花的时间也只有这个时间的零头。
有人懂这个原理的么??
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.ldap.*;
import java.io.IOException;
import java.util.*;
import com.sun.jndi.ldap.ctl.*;
public class PageMain {
public static void main(String[] args) {
Hashtable m_env = new Hashtable(5, 0.75f);
LdapContext m_Ctx;
m_env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
m_env.put("java.naming.ldap.version", "3");
m_env.put(Context.PROVIDER_URL, "ldap://192.168.1.153:12345");
m_env.put(Context.SECURITY_AUTHENTICATION, "simple");
m_env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
m_env.put(Context.SECURITY_CREDENTIALS,"12345678");
try{
m_Ctx = new InitialLdapContext(m_env, null);
boolean b = true;
int counter = 0;
int listSize = 0;
int i = 0;
int nTargetOffset = 1;
int nPageSize = 20;
while (b) {
VirtualListViewControl vctl
= new VirtualListViewControl(nTargetOffset, 0, 0, nPageSize, Control.CRITICAL);
javax.naming.ldap.SortControl sctl
=new javax.naming.ldap.SortControl(new String[] { "cn" },Control.CRITICAL);
m_Ctx.setRequestControls(new Control[] { sctl, vctl });
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] retAtt = { "cn" };
constraints.setReturningAttributes(retAtt);
String searchCondition = "(objectclass=inetOrgPerson)";
System.out.println("-----------"+i+"-----------");
i++;
NamingEnumeration results =
m_Ctx.search("dc=com", searchCondition,constraints);
System.out.println(m_Ctx);
int subcounter = 0;
if (results != null) {
System.out.println("---------println results-----------");
while (results.hasMoreElements()) {
subcounter++;
SearchResult si = (SearchResult) results.nextElement();
counter++;
System.out.println(si.getName());
}
System.out.println(searchCondition + " returned "+ subcounter);
if (subcounter == 0){
b = false;
}
} else{
System.out.println(searchCondition+ " did not match with any!!!");
}
System.out.println("------------------NEW PAGE NO. " + i);
nTargetOffset += subcounter; // nPageSize; //subcounter;
}
} catch (NamingException e) {
e.printStackTrace();
System.out.println(e);
}catch (IOException ex) {
System.out.print(ex);
}
}
} |
|