我们已经为新发布的软件产品发布了一个基本的 iOS 应用程序(使用 FB 4.6 使用 Adobe Flex/AIR 构建),我的任务是对应用程序进行增强,从本质上使其功能更加符合要求。
我做了很多改进,一路上取得了不同程度的成功。但是,我离题了。
我发现应用程序中似乎存在严重的内存泄漏,直到现在才被发现。
该应用程序的初始版本并没有做很多事情,但对于大多数用途来说已经足够了。但是现在它包含了更多的功能,我在测试中注意到它在 iPad 上有点迟钝。我将其归结为设备问题,并猜测第一代 iPad 不如新 iPad 强大。
我们在同事的 iPad 3 上测试了该应用程序,发现了同样的速度问题。我通过 FB 的分析器运行该应用程序,发现它似乎使用了非常多的内存。当然,这个应用程序是针对移动平台的,并且分析器在 Windows 的 Flash Player 中运行该应用程序,但我认为这是问题所在。
应用程序中出现的第一个视图只是一个登录屏幕。我在应用程序启动时查看了图表,内存使用率一直很低,然后突然飙升至 120MB。这是没有用户输入的。登录或切换视图会使使用量翻倍,甚至三倍,而且永远不会下降。
我承认,也许我没有像我应该意识到的那样意识到资源使用,但我一直在尝试清除对象,比如我去的。
大多数后端功能是通过调用用 ASP.NET 编写的 Web 服务来完成的。使用 Web 服务向导将 Web 服务插入 Flash Builder...例如,URL 将是http://www.mydomain.com/MyWebService.asmx?WSDL
第一个“主页”视图不会调用任何 Web 服务功能,除非用户实际执行了某些操作,例如按下按钮。我从视图的“fx:Declarations”部分取出 Web 服务声明,并注释掉对它的所有引用,然后再次尝试分析器。
这一次,使用量上限为 2MB。这是一个天文数字的差异。
分析器显示 99% 的内存被“XML”类使用,这让我相信 Web 服务是问题所在。似乎视图在启动时正在查询 Web 服务,并且为此使用了大量内存。
我在这里错过了什么吗?有没有更有效的方法从 AIR 应用程序调用 Web 服务?我究竟做错了什么?
提前致谢!