我的Iphone应用程序上的一些压力测试

时间:2010-02-26 03:13:01

标签: iphone stress-testing

我在我的Iphone应用程序上运行了一些压力测试。结果如下。我想知道我是否应该关注,如果是的话,我可能会做些什么。

我设置一个计时器每秒触发一次。每当计时器触发时,应用程序都会从​​服务器请求一些XML数据。当数据到达时,应用程序然后解析数据并重新显示受影响的表视图。在几次试验中,应用程序在崩溃之前通过循环平均大约500次。

然后我从上面的循环中删除了解析和重新显示步骤。现在它可以进行大约800次。

我设置了一个循环来重复重新显示表格视图,而不下载任何内容。一旦重新显示完成,下一个重新开始。在2601循环之后,应用程序崩溃了。

以上所有数字都大于用户可能做的数字。

此外,当我尝试在乐器下的设备上运行时,我的应用程序永远不会持续很长时间。所以我无法以这种方式获得有用的数据。 (但如果没有乐器,它会持续很长一段时间,如上所述。)

1 个答案:

答案 0 :(得分:2)

我想你需要非常关注。编程的第一条规则是用户永远不会做你期望的事。

需要考虑的事项:

  • 存取方法。使用它们。建立 所有属性的属性和 总是用它来访问它们 适当的getter / setter方法:

object.property = some_other_object;      -OR-
[object setProperty:some_other_object];

object = some_other_object.some_property;
object = [some_other_object some_property];

拒绝做以下事情的诱惑:

property = some_other_object;
[property retain];
  • 您是否从ObjectAlloc获得输出? 内存泄漏有4种工具, 性能和对象分配。 他们都没有加载吗?
  • 当应用崩溃时你会得到什么? EXEC_BAD_ACCESS还是其他一些错误?
  • 平衡保留(分配或 复制)并发布。这是个好主意 保持每个alloc / copy平衡 在...发布/自动释放 同样的方法。如果你使用你的 访问者所有的时间,需要 手动发布很少。
  • Autorelease通常会隐藏真实内容 问题。可能是Autorelease 可以掩盖一些棘手的分配 的问题。仔细检查你的使用情况 自动释放。

已编辑(根据您的故障代码添加) 基于您的上述“程序接收信号:0”的答案。这表明您的内存已用完。我首先会查找代码执行类似的实例:

myObject = [[MyClass alloc] init];
[someMutableArray addObject:myObject];

并且在将新对象放入数组时没有“释放”。如果这个数组随后被释放,那么对象myObject将成为一个孤儿,但无论如何都要在内存中闲逛。这样做的简单方法是grep所有的“alloc”/“copy”消息。除极少数情况外,在同一功能中应该配对“释放”/“自动释放”。通常情况下,上面应该是:

myObject = [[[MyClass alloc] init] autorelease];
[someMutableArray addObject:myObject];