3

这是一个两部分的问题

1) WP7 中可以同时运行的 HttpWebRequest 的最大数量是多少?

我将创建一个 ScheduledTaskAgent 来运行 PeriodicTask。将有 2 个不同的 REST 服务调用,第一个将获取需要下载的记录的 ID 列表,第二个服务将用于一次下载这些记录。我不知道会有多少条记录,我的 guestimage 会是 +-50。

2.) 一次性提出所有单独的记录请求是个坏主意吗?(假设它可能)还是我应该等待请求完成后再开始另一个请求?

4

4 回答 4

5

刚刚花了一个半星期的时间让 BackgroundAgent 保持在它的内存限制内,我建议一次做一个。

您将大约一半的内存丢失给系统库等,您的第一个 Web 请求将再占用近 20%,但它似乎在后续请求中重用了该内存。
如果您需要将结果存储到本地数据库中,则需要更多的数据。我发现 aCompiledQuery使用更少的内存,这意味着保存你的上下文的单个实例。

在每次通话之间我建议做一个GC.Collect(),我什至添加一个简短Thread.Sleep()的,以确保该过程有一些时间来整理事情。
我做的另一件事是跟踪我正在使用的内存量,并在达到 97% 或 98% 左右时尝试优雅地退出。

您不能使用调试器来测试内存限制,因为调试内存要高得多并且限制不是强制执行的。但是,对于代码版本之间的比较测试,调试器在后续运行相同代码时会产生非常相似的结果。

Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage您可以使用和跟踪您的内存使用情况Microsoft.Phone.Info.DeviceStatus.ApplicationMemoryUsageLimit

我写了一个状态日志,IsolatedStorage这样我就可以在手机上看到运行的结果并ScheduledActionService.LaunchForTest()用来启动。然后我使用ShellToast通知让我知道任务何时运行以及何时完成,这样我就可以启动我的应用程序以读取状态日志而不会中断它。

于 2011-08-09T22:48:39.583 回答
0

泰勒,

我的 2 美分在这里。

  1. 我不相信您可以启动 HTTPWebequests 的方式有任何限制。然而,这些必须是异步的,当然,并且可以从浏览器堆栈中提供。包括 IE9 在内的大多数现代浏览器同时处理超过 5 个到同一个域;但不能保证您立即处理请求。但是,如果您愿意在单独的线程上等待,将您的内容转储到请求管道并等待另一个线程的响应,这并不重要。这篇文章(这里)很好地解释了我们为什么需要这样做。

  2. 这种方法也没有错,IMO。您只需要等到所有请求都有各自的管道然后等待响应。

谢谢!

于 2011-08-09T19:45:31.530 回答
0

1) PeriodicTask 或 ResourceIntensiveTask 中的内存限制为 5 MB。所以你绝对应该非常小心地控制你的请求。我认为代码没有限制。

2)你只有 5 MB。因此,当您同时启动所有请求时,它将立即终止。

3) 我认为你最好使用 ResourceIntensiveTask,因为 PeriodicTask 应该只运行 15 秒。

Mango 中多任务功能的良好指南:http: //blogs.infosupport.com/blogs/alexb/a ​​rchive/2011/05/26/multi-tasking-in-windows-phone-7-1.aspx

于 2011-08-09T20:56:08.117 回答
0

我似乎记得(但现在找不到参考资料)操作系统一次可以发出的最大请求数是 7。您应该避免一次发出这么多请求,因为它会阻止其他/系统应用程序运行能够提出要求。

于 2011-08-10T09:18:21.023 回答