Android HttpClient的性能

我开发的 Android应用程序使用大量的http请求到Web服务.首先,我在每个请求之前创建一个新的HttpClient实例.
为了提高性能,我尝试在许多线程中执行请求.所以,我创建了一个HttpClient实例,由所有线程共享,使用ThreadSafeConnectionManager:
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(),80));

BasicHttpParams params = new BasicHttpParams();
ConnManagerParams.setMaxTotalConnections(params,100);
HttpProtocolParams.setVersion(params,HttpVersion.HTTP_1_1);
HttpProtocolParams.setUseExpectContinue(params,true);

ThreadSafeClientConnManager connManager = new ThreadSafeClientConnManager(params,registry);
HttpClient client = new DefaultHttpClient(connManager,params);

但表现却下降了,让我感到惊讶.我已经测量了时间,以这样的方式排出要求:

long startTime = System.currentTimeMillis();
HttpResponse response = client.execute(postRequest);
long reqTime = System.currentTimeMillis() - startTime;
Log.i("SyncTimer","Request time:" + reqTime);

这里是一个日志,我可以用简单的DefaultHttpClient来获取每个请求没有参数的新实例:

01-11 11:10:51.136: INFO/SyncTimer(18400): Request time:1076
01-11 11:10:54.686: INFO/SyncTimer(18400): Request time:1051
01-11 11:10:57.996: INFO/SyncTimer(18400): Request time:1054
01-11 11:10:59.166: INFO/SyncTimer(18400): Request time:1070
01-11 11:11:00.346: INFO/SyncTimer(18400): Request time:1172
01-11 11:11:02.656: INFO/SyncTimer(18400): Request time:1043

和ThreadSafeClientConnManager和单个HttpClient实例得到的结果:

01-11 11:06:06.926: INFO/SyncTimer(18267): Request time:7001
01-11 11:06:10.412: INFO/SyncTimer(18267): Request time:3385
01-11 11:06:20.222: INFO/SyncTimer(18267): Request time:9801
01-11 11:06:23.622: INFO/SyncTimer(18267): Request time:2058
01-11 11:06:29.906: INFO/SyncTimer(18267): Request time:6268
01-11 11:06:34.746: INFO/SyncTimer(18267): Request time:3525
01-11 11:06:50.302: INFO/SyncTimer(18267): Request time:15551

会发生什么,我该怎么办?

UPDATE

使用保持活力的优势 – 是我想要的.但是当我为每个请求连接创建新的HttpClient实例不能重复使用.尽管如此,这样的版本运行速度更快,但是对于我来说这是不清楚的.

解决方法

这一切都很简单.认情况下,HttpClient只允许与HTTP规范要求的同一目标主机的两个并发连接.因此,您的工作线程有效地消耗大部分执行时间,等待这两个连接可用.

您应该增加“每条路线的最大连接数”限制,以减少/消除工作线程争用.

您可能还想查看Apache HttpComponents项目使用的基准测量HttpClient的性能.

http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore

相关文章

###实现效果*本实例主要实现用ViewPage和Fragment实现选项卡...
一、安装 JDK 下载JDK最新版本,下载地址如下: http://www....
这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...