应用在3GS上运行速度快,但在3G上运行缓慢。

4
我刚接触电脑编程,刚刚完成了一个应用程序的编码,并在3G和3GS上进行了测试。 在3GS上,它像模拟器上一样正常工作。 但是,当我尝试在3G上运行它时,该应用程序变得极其缓慢。 我不确定原因,希望有人能为我解惑。
总体而言,我的应用程序有几个视图控制器类,其中一个是标题页,一个是主页,一个是设置等。 我使用了溶解来从标题页过渡到主页。 但即使这个简单的过渡在3G上也显示出不平滑的性能! 我的应用程序的另一部分涉及通过放大图像来缩放图像,通过推送或溶解切换图像来接收触摸事件,将照片保存到照片库中,在文件夹中存储和检索一些照片和一些数据以及在SQlite数据库中存储和检索一些数据,每个动作都表现出不平滑的情况。
与一些重型图形或重型数学应用程序相比,我认为我的应用程序非常简单。 我完全不知道为什么该应用程序会如此缓慢和不平滑,以至于在3G上几乎无法使用。 任何帮助/指导都将不胜感激。 感谢您的帮助。

6
我知道你知道3G比3Gs慢。听起来“溶解”这个词挺沉重的。 - d-_-b
这就是为什么我保留了一台第一代设备进行测试。如果您要部署的应用程序将在用户群中包含这些旧设备,那么您需要在它们上面测试您的应用程序。通过使您的应用程序在旧型号上运行良好,您几乎可以保证它在新型号上也会非常流畅。 - Brad Larson
4个回答

6

您可能想尝试使用Shark来分析您的应用程序,以找出性能瓶颈所在。


没错。理解性能下降的第一步是通过Shark、Instruments或其他一些工具进行分析。 - Brad Larson
谢谢 David。我想我需要一些时间来学习如何使用 Shark。 - Anthony

1

我不知道它对你的情况有多大关联,但我的游戏(厚颜无耻地推广)MultiMaze 在图形上要求不高,在我的3GS上运行得非常好。但是当我在3G上尝试时,帧率降至10-20 fps。我将整个代码库从CoreGraphics移植到OpenGL ES,这使得差异非常大。现在它在我的3GS上以极限速度(60 fps)运行,并且在3G上也非常接近。


4
我们已经走得很远了,现在手机上的20帧每秒都被认为是慢的。 - Mr. Boy
谢谢Marcelo。在尝试OpenGL ES之前,我会尝试更多的方法,因为我完全是计算机编程的新手。无论如何,还是谢谢。 - Anthony

1

你的内存使用量很大吗?3G有128MB,而3GS有256MB的RAM。

你是否收到内存警告?在我的调试版本中,我在didReceiveMemoryWarning中使用NSLog,以便我可以看到是否/何时收到警告。

编辑:检查你的照片大小,它们是否已经调整为iPhone屏幕大小或者是原始大小?


程序员您好,感谢您的建议。实际上,我的应用确实会出现内存警告,但我不知道原因。整个应用只有3.2MB(包括所有图像和代码),并且我仅在需要时加载这些图像。请问内存消耗的具体位置在哪里? - Anthony
你可以使用Leaks工具来检查内存泄漏,除此之外我不知道如何找出对象占用多少空间或程序使用了多少空间。照片可能非常大,请首先检查它们,不要忘记jpg和png在加载到内存时是未压缩的,它们可能比相应的磁盘文件大很多倍。 - progrmr

0

好的,终于找到了问题并得到了解决方案。问题是我有大约十几个透明图像叠放在一起形成我的主视图。所以在任何动画中,系统需要重新绘制每个图层并计算它们的透明效果等等。(实际上我不太确定,但我认为是这样)

我的解决方案是创建一个临时的复合视图,包含它们所有,并将复合视图作为图像放置在全屏视图中,在开始任何动画之前。这会稍微延迟淡入淡出的开始时间,但淡入淡出本身现在更加流畅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接