使用MonoTouch的HttpWebRequest时性能不佳

时间:2013-05-13 12:09:06

标签: xamarin.ios httpwebrequest

我正在MonoTouch应用程序中下载一些小图像(每个大约40 KB)。图像是并行下载的 - 主线程创建请求并异步执行它们。

我使用WebRequest.Create创建HTTP请求,在完成处理程序中,我使用response.GetResponseStream()检索响应流。然后,以下代码从响应流中读取数据:

var ms = new MemoryStream();
byte[] buffer = new byte[4096];
int read;
while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
    ms.Write(buffer, 0, read);
}

当只下载一个图像时,运行速度非常快(50-100毫秒,包括等待Web请求)。但是,只要有多个图像,比如5-10,这些线条需要2秒以上才能完成。有时线程花费超过4秒。请注意,我不是在谈论response.BeginGetResponse所需的时间或等待回调运行的时间。

然后我测试了以下代码,它在同一场景中需要不到100毫秒:

var ms = new MemoryStream();
responseStream.CopyTo(ms);

第一个版本出现这种巨大滞后的原因是什么?

我需要代码的第一个版本的原因是我需要部分下载的图像数据(特别是当图像更大时)。为了隔离性能问题,我删除了处理部分下载图像的代码。

我在模拟器和iPad 3上以调试和发布模式运行代码,我尝试了两种编译模式,LLVM和非LLVM。 所有配置,调试/发布,设备/模拟器,LLVM /非LLVM都存在滞后。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

您好也许不是您问题的直接答案,但是您是否尝过SDWebImageXamarin Component Store?这是一个由Olivier Poitrey开发的令人惊叹的库,开箱即用,提供异步图像下载,内存+磁盘映像缓存和其他一些好处,非常好。

希望这有帮助

亚历