什么可能导致OSX / Cocoa应用程序中对EMPTY窗口调整的缓慢/不稳定响应?

时间:2011-04-13 09:02:44

标签: cocoa performance macos resize window

新信息:我刚注意到的东西(因为这不是我通常会做的事情),但这是一个多窗口应用程序,带有工具调色板和图像窗口。图像窗口是有问题的 - 工具窗口没有调整大小的问题,它非常快速和平滑。所以它只是应用程序中的其他窗口;图像编辑窗口,图像库窗口。

我的应用结构中的某些内容可能有误,但我不知道是什么。症状是调整窗口大小不顺利 - 相反,它会挂起片刻,然后“猛拉”到下一个位置。乐器说时间花在mach_msg_trap上。窗口没有做任何事情 - 我评论了所有内容以试图缩小可能导致它的原因,现在甚至没有一个正在进行的事情(虽然窗口当然是渲染它的标题栏和边框等等)所以这个没有工作要做的空窗口就像泥浆一样缓慢。

我用Google搜索过疯狂,我已经阅读了大量有关runloops,windows和视图的文档,我甚至找不到可能导致此问题的一些提示。

我在10.5.8,xcode 3.1.3,gcc 4.0的8核机器中看到了这个问题,8 GB的ram,大量免费,以及充足的可用磁盘空间。我在双核macbook pro / 2GB和双核macbook / 2GB上看到相同的行为,都运行10.5.8。

当所有代码都到位后,我的应用程序中的所有内容都能正常运行,但是我看到的更新速度非常慢,这会让您感到不安。 cpu利用率不是很高,所以有更多的时间用于显示,它只是没有被使用。

我的所有显示代码都被注释掉了(字面意思是......从上到下,没有直观,没有视图代码,所以app确实在做什么没有),生涩是一样的,但cpu利用率几乎为零。这就好像它没有足够频繁地调用窗口。但我找不到任何理由不这样做。

...而且“生涩”,我的意思是当我以适中或甚至慢的速度拖动窗口右下方的小调整大小小部件时,框架保持原样,然后“抓住”一个巨大的距离赶上鼠标的位置,然后重复。

重新添加代码,它的行为相同。所以这不是绘图代码。我的直觉说是结构性问题 - 在IB中做错了,或者我如何设置视图等等。但我找不到任何我应该做的事情,“这必须做到这一点在任何文档或在线提示中调整resize / redraw响应或runloop响应snappy。

在窗口中有一个自定义视图,从IB的这些东西的调色板中拖出来。它设置为使用窗口大小自动调整大小。确实如此。但它完美地跟随窗户,也就是说,急促地说。是否正确。

任何真正的可可专家都有任何想法吗?

2 个答案:

答案 0 :(得分:3)

您的应用可能会被阻止与WindowServer通信(例如,当我运行Minecraft或Starcraft 2时,我会看到这种情况)。在Shark或Instruments中的“All Thread States”模式下取样,如果我的模糊内存名称正确,则查找CGSSynchronizeBackingStore。无论如何都是这样的。

“所有线程状态”模式是报告阻塞时间和运行时间。

答案 1 :(得分:0)

通过添加一个自动生成的绘图代理来确保绘制的图像永远不会大于它所在的屏幕,我已经消除了问题的明显证据。

1)该机器足够快,可以快速绘制屏幕大小的代理,

2)工具窗口的调整大小结束时刷新成功,并且

3)调整大小(和绘图)是平滑的,因为当图像窗口调整大小时,我已经缩短了工具窗口的画面。

我将继续前进,并通过这一系列的解决方法来处理这个问题,尽管我仍然认为某处存在潜在的操作系统或结构问题。