菜鸟教程小白 发表于 2022-12-12 19:09:13

ios - CollapseLayers = true 时 iOS 中的核心绘图性能


                                            <p><p>在我的 iOS 应用程序中,我使用 UIScrollView 和 UIPageControl 来显示三个不同时间段的 CPTXYGraph 图,即一个显示过去 30 天的数据,下一个显示过去 90 天的数据,第三个显示过去六个月的数据。 </p>

<p>即上个月
<img src="/image/EhOsK.png" alt="enter image description here"/> </p>

<p>最后 90
<img src="/image/rdCOa.png" alt="enter image description here"/> </p>

<p>等</p>

<p>UIScrollView 和 UIPageControll 的组合允许我加载每个图表,然后让用户在图表之间滑动以查看不同的时间段。</p>

<p>在我尝试使我的应用程序成为通用应用程序并尝试在 iPad 上运行之前,一切都运行良好。当我旋转 iPad 时,应用程序会崩溃并导致 iPad 进行软重置。当连接到调试器时,iPad 会在崩溃前报告内存不足警告。</p>

<p>我发现在 CPTGraphHostingView 上设置 CollapseLayers = true 然后我可以在 iPad 上运行该应用程序而不会崩溃,但是在其他页面上加载额外的图表比我在 iPhone 上执行的速度要慢几个数量级。当然,我使用的是 iPhone 5s 和 iPad3,但我没想到会像我看到的那样显着放缓。</p>

<p>困惑的是,我在仍然设置 CollapseLayers = true 的情况下将应用程序重新加载到 iPhone 上,并注意到 iPhone 在加载水平图时也明显减慢了速度。请参阅下面的 Instruments 捕获</p>

<p>首先使用 CollapseLayers = false
<img src="/image/ncvBI.png" alt="enter image description here"/> </p>

<p>其次是 CollapseLayers = true
<img src="/image/Z7qPR.png" alt="enter image description here"/> </p>

<p>在每次捕获中,我都在 iPhone 上做相同数量的“工作”,启动应用程序并旋转。请注意,当 CollapseLayers = true 时,CPU 在 100% 时花费的时间明显长于 CollapseLayers = false 时,但内存使用量要少得多,大约为 38MB 和 199MB。 </p>

<p>关于如何减少内存使用量以便不需要设置 CollapseLayers = true 或如何通过 CollapseLayers = true 提高性能的建议? </p>

<p><strong>更新</strong></p>

<p>我找到了一个讨论这个主题的讨论:</p>

<p> <a href="https://groups.google.com/forum/m/#!topic/coreplot-discuss/LqMJEPyuR1o" rel="noreferrer noopener nofollow">https://groups.google.com/forum/m/#!topic/coreplot-discuss/LqMJEPyuR1o</a> </p>

<p>来自帖子</p>

<p><em>渲染速度受 CPU 限制,因此不幸的是,更高的分辨率需要 4 倍的工作量,这与您所看到的差不多。</em></p>

<p>这至少解释了为什么我看到 iPad3 与 iPhone 相比性能如此出色。</p>

<p>尝试从我的图表中删除主题并保留 CollapseLayers = false,遗憾的是这仍然会使 iPad 崩溃。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>设置 <code>collapsesLayers</code> = <code>YES</code> 告诉 Core Plot 将整个图形绘制到单个 Core Animation 层中,而不是为所有各种元素(轴、绘图)使用单独的层、标签等)。这减少了内存使用,但如果有任何变化,则强制整个图形重绘,而不是仅仅重绘发生变化的部分。确保图表在创建后没有多次重绘。请记住,对图表的<em>任何</em>更改或托管 View 将强制它在显示后重新绘制。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - CollapseLayers = true 时 iOS 中的核心绘图性能,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/21923675/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/21923675/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - CollapseLayers = true 时 iOS 中的核心绘图性能