ArcGIS Server Java ADF 案例教程 42

来源:互联网 发布:网络拓扑的分层结构 编辑:程序博客网 时间:2024/05/21 22:29
二 使用Utility Objects提高查询性能【案例】

这是我的同事使用Utility Objects解决某个用户的一个实际问题。这个用户通过调用AO进行空间查询,然后在此基础上进行分页,分页的时候遍历该页所有的IFeature,提取属性信息,构造成自己的结果返回——结果,遇到了严重的性能问题,在上万条记录中查询一般两三分钟才可以出结果,这在一个国家级项目中是难以忍受的。

经过添加日志分析,发现AO查询的速度非常快,问题就是出在遍历IFeature这个操作上,是不停地进行跨进程调用产生的。就在这个时候9.3.1正式发布了,Utility Objects有如救星般地降临了!

由于在上一小节关于怎么定义Utility Object已经讲得比较清楚,这里就不在啰嗦怎么封装接口和实现类了。下面是封装起来的功能代码,主要就是遍历分页要素并提取有用的信息,当然,原先这部分代码是在Web层执行的。

IFeature feature = featureCursor.nextFeature();

int featureCount = 0;

while (feature != null)

{

if (featureCount >= first + pageSize)

{

break;

}

if (featureCount >= first)

{

result.add(ServiceUtil.feature2Einfo(feature));

}

featureCount++;

feature = featureCursor.nextFeature();

}

经过这样的处理,性能有了极大的提升,一个简单的测试可以说明情况:这里做了一个半径1000公里的空间查询,返回结果总数为30437条。

分页起始记录

分页记录数

优化前(s)

优化后(s)

0

500

179.406

5.203

如果你有细粒度的操作,又遇到了性能问题,现在是不是很心动?