GCContextDrawImage 性能不佳,因为它调用了可疑的调试函数
Bad performance of GCContextDrawImage due to it calling suspicious debug functions
对 GCContextDrawImage
的调用结果是我的 Mac OS X 应用程序的瓶颈,尤其是在视网膜屏幕上。我设法通过 稍微缓解了它,但它似乎仍然比我预期的要慢。
在使用 Instruments 调查堆栈转储时,我注意到在两个具有高度可疑名称的函数上花费了大量时间,vImageDebug_CheckDestBuffer
正在调用 _ERROR_Buffer_Write__Too_Small_For_Arguments_To_vImage__CheckBacktrace
。请参阅下面的完整堆栈转储。
我觉得这像是某种调试断言?我 运行 是 vImage 库的调试版本而不自知吗?我能做些什么来阻止这些功能耗尽我所有宝贵的周期吗?
图形上下文(第一个参数)呢?你从其他线程传递它吗?如果您将在主线程中获取上下文,然后也在主线程中绘制图像怎么办?
通过确保源位图的每条扫描线中的像素数据的开头与 16 字节对齐,性能问题已得到解决。这样做似乎可以使图像绘制 显着 更快。据推测,如果您分配新图像,默认情况下会发生这种情况,但我们将 CGImage 包裹在未对齐的现有像素缓冲区周围。
对 GCContextDrawImage
的调用结果是我的 Mac OS X 应用程序的瓶颈,尤其是在视网膜屏幕上。我设法通过
在使用 Instruments 调查堆栈转储时,我注意到在两个具有高度可疑名称的函数上花费了大量时间,vImageDebug_CheckDestBuffer
正在调用 _ERROR_Buffer_Write__Too_Small_For_Arguments_To_vImage__CheckBacktrace
。请参阅下面的完整堆栈转储。
我觉得这像是某种调试断言?我 运行 是 vImage 库的调试版本而不自知吗?我能做些什么来阻止这些功能耗尽我所有宝贵的周期吗?
图形上下文(第一个参数)呢?你从其他线程传递它吗?如果您将在主线程中获取上下文,然后也在主线程中绘制图像怎么办?
通过确保源位图的每条扫描线中的像素数据的开头与 16 字节对齐,性能问题已得到解决。这样做似乎可以使图像绘制 显着 更快。据推测,如果您分配新图像,默认情况下会发生这种情况,但我们将 CGImage 包裹在未对齐的现有像素缓冲区周围。