cocoa - 什么可能会导致 OSX/Cocoa 应用程序中的空窗口调整大小响应迟缓/不稳定?

标签 cocoa performance macos resize window

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

我的应用程序结构中可能存在某些问题,但我不知道是什么问题。症状是调整窗口大小并不顺利——相反,它会挂起一会儿,然后“猛然”到下一个位置。 Instruments 表示时间花在 mach_msg_trap 上。窗口没有做任何事情 - 我注释掉了所有内容,试图缩小可能导致它的原因,现在甚至没有我的抽屉在进行(尽管窗口当然正在渲染其标题栏和边框)等)所以这个空窗口,要做的工作为零,速度慢得像泥巴一样。

我疯狂地用谷歌搜索,阅读了大量有关运行循环、窗口和 View 的文档,但我什至找不到可能导致此问题的任何提示。

我在 10.5.8、xcode 3.1.3、gcc 4.0 下的 8 核机器(具有 8 GB 内存、大量可用空间和大量可用磁盘空间)下看到此问题。我在双核 macbook pro/2GB 和双核 macbook/2GB 上看到了相同的行为,均运行 10.5.8。

当所有代码就位时,我的应用程序中的所有内容都可以正常工作,但会受到我所看到的非常慢的更新率的影响。 cpu 利用率不是很高,因此有更多的时间可用于显示,只是没有被使用。

我的所有显示代码都被注释掉了(从字面上看......从上到下,没有绘图矩形,没有 View 代码,所以应用程序实际上什么也没做),抖动是相同的,但是CPU利用率几乎为零。就好像它没有足够频繁地调用 Windows DrawRight 。但我找不到任何理由为什么它会失败。

...并且“生涩”,我的意思是当我以中等甚至慢速拖动窗口右下角的小调整大小小部件时,框架保持在原来的位置,然后“捕捉”一个巨大的 catch 鼠标到达位置的距离,然后重复。

重新添加代码,效果相同。所以这不是绘图代码。我的直觉说这是一个结构性问题——在IB中做错了什么,或者我如何设置 View 等等。但我找不到任何我应该做的事情,因为“必须这样做”在任何文档或在线提示中使调整大小/重绘响应或运行循环响应变得敏捷”。

窗口中有一个自定义 View ,是从 IB 的此类内容调色板中拖出的。它设置为根据窗口大小自动调整大小。确实如此。但它完美地跟随窗口,也就是说,它是不稳定的。绘制矩形或不绘制矩形。

真正的 cocoa 专家有什么想法吗?

最佳答案

您的应用程序与 WindowServer 的通信可能被阻止(例如,当我运行 Minecraft 或 Starcraft 2 时,就会发生这种情况)。在 Shark 或 Instruments 中的“所有线程状态”模式下采样,并查找 CGSSynchronizeBackingStore(如果我的模糊内存没有记错的话)。无论如何,类似的事情。

“所有线程状态”模式可以报告阻塞时间以及运行时间。

关于cocoa - 什么可能会导致 OSX/Cocoa 应用程序中的空窗口调整大小响应迟缓/不稳定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646766/

相关文章:

swift - MacOS 中的 WkWebView 在本地或远程内容上保持空白

cocoa - 基于 View 的 NSTableView 与 NSCollectionView?

ruby 经理 RVM 提示 posix

android - sm list-disks not found

macos - Cocoa OS X - 应用程序安装程序

objective-c - Xcode调试器: Break anywhere in my code following a given line of code

swift - 通过进程 ID 将 KeyEvent 发送到目标窗口

sql - Oracle SQL 中的高效四向联接

Linux 内核 0.0.1 vs 2.6.36, "ctype.h",有什么区别?

c - 对短代码进行可靠的性能测量