为啥我的 Cocoa 应用程序中的某些行需要永远运行?

Posted

技术标签:

【中文标题】为啥我的 Cocoa 应用程序中的某些行需要永远运行?【英文标题】:Why are certain lines in my Cocoa application taking forever to run?为什么我的 Cocoa 应用程序中的某些行需要永远运行? 【发布时间】:2010-02-12 01:06:04 【问题描述】:

我遇到了一个非常奇怪的问题。我在一个分离的线程中运行一个循环,我的循环中的一些代码行(循环的每次迭代中的不同行)需要很长时间(~45秒)才能执行,即使它们是简单的命令,如用数据初始化 NSXMLDocument。这个问题也很不一致,不会出现在同一个地方,也不是每次都出现。任何想法为什么会发生这种情况?

PS。由于我的代码又长又复杂,而且问题不一致,所以我不能发布任何示例代码:/

【问题讨论】:

也许你应该重构你的代码以消除复杂性,问题就会变得明显或在清理过程中自行解决。 考虑到正在加载的 XML 文档的大小,即使是这样一个简单的“命令”也可能需要很长时间才能运行,因为在所有这些花哨的类名背后实际上完成了很多繁重的工作 - 这个处理字符串数据时生效两次。 【参考方案1】:

不要猜测性能问题。有很多工具可以帮助您确定问题所在,包括 Instruments 应用程序中的 CPU Sampler 仪器和 Shark。这两种方法都可以让您准确分析 CPU 时间的去向,以便您可以做一些事情。

【讨论】:

【参考方案2】:

使用Instruments 找出原因。

【讨论】:

【参考方案3】:

别人怎么说;您应该使用 Instruments 来确定时间的去向。特别是,您需要使用 CPU 采样器工具和虚拟内存活动工具。

从它的声音来看,我敢打赌,您的应用程序正在导致系统耗尽 RAM 并开始分页到磁盘。这将完全按照您描述的方式杀死性能;在运行期间的某个不确定时间,该应用程序似乎要么超级缓慢,要么只是暂停了一段时间。

您可能还应该使用 Object Alloc 工具来确定您是否按预期使用了内存,如果使用很多,您可以在哪里优化内存使用。

【讨论】:

以上是关于为啥我的 Cocoa 应用程序中的某些行需要永远运行?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 Golang 频道写入永远阻塞?

为啥当我使用 IIF 时,我的表中的某些行而不是其他行的日期转换失败

如何让 Cocoa 明白我的 iPhone 应用程序不是英文的?

Swift 命令行程序中的 CFRunLoop

为啥重新部署应用后 Firebase 需要永远完成相同的功能?

Cocoa osx NSTableview 改变行高亮颜色