C
内存管理实用技巧
本主题提供了一些与安全关键UI元素相关的内存管理的实用技巧。这些注意事项会影响存储以及Qt安全渲染器运行时组件。
请注意,Qt安全渲染器运行时根据SafeRenderer::Constraints中的值分配随机访问内存。当您优化内存管理时,应首先优化安全关键资产然后是约束。
避免动态SafeText
使用静态安全关键QML类型而不是动态SafeText有多个优点
- SafeText、SafeImage和SafePicture使用压缩数据,而不是动态SafeText。特别是具有大字体的动态SafeText会使用大量的内存。
- 静态SafeText QML类型支持不同书写系统的各种符号。
- 静态SafeText与翻译一起使用,而动态SafeText则不行。
通常,只有在强制使用时尚,例如在转速表数字或其他不可预见文本中,才考虑使用动态SafeText QML类型。而不是动态SafeText,您可以使用有限的符号集(目前为Latin-1)。
如果您的字体文件占用太多的内存,考虑创建一个仅包含您需要的符号的自定义.qpf2文件,例如数字。即使这是一个非常容易出错和繁琐的解决方案,但从内存消耗的角度来看,这也是最佳的。
以下布局数据展示了这些观点。您可以在Qt Cluster示例代码中找到这些数据,位置在<QSR安装路径>/Examples/QtSafeRenderer-<版本>/saferenderer/qtcluster/layoutData/DashboardSportForm。
4568 Feb 14 12:05 DashboardSportForm.ui.srl 5608 Feb 14 12:05 Icon_TurnLeft_ON_48x48.srb 5608 Feb 14 12:05 Icon_TurnRight_ON_48x48.srb 2732 Feb 14 12:05 iso_grs_7000_4_0083_48x48_e41e25.srb 1948 Feb 14 12:05 iso_grs_7000_4_0456_48x48_5caa15.srb 2752 Feb 14 12:05 iso_grs_7000_4_1434A_48x48_face20.srb 3272 Feb 14 12:05 iso_grs_7000_4_1555_48x48_face20.srb 2736 Feb 14 12:05 kmText_60x30_ffffff.srb 361564 Feb 14 12:05 lato_72_50.qpf2 7120 Feb 14 12:05 safeText_215x68_face20.srb 81 Feb 14 12:05 speedText.srt 552 Feb 14 12:05 turnleft.sts 552 Feb 14 12:05 turnright.sts
位图在屏幕上大小为48x48,只需要几KB的内存。静态safeText_215x68_face20.srb (215x68尺寸)的内存仍然小于10KB(确切地说,是7120字节)。即使是72px的字体Lato也占用了大部分空间(362KB),即使只需要一个或几个字符。
如果您有几个内容不同的消息框,从内存消耗和性能的角度来看,使用静态SafeText而不是动态SafeText是明智的。首先,动态SafeText需要字体文件来存储符号。此外,Qt安全渲染器运行时必须在启动时预留一个固定的内存区域来渲染动态文本。即使框中有大量空白空间,这个区域的大小也必须与动态SafeText的边界框大小相同。
动画
动画根据动画持续时间和每秒帧数目标值创建了大量的位图。如果动画图形很简单,比如ISO图标,它们通常可以有效地压缩,并且从内存消耗的角度来看不是一个大问题。
如果图形较为自然,则位图可能压缩效率较低,因为压缩算法是一个简单的行程长度编码(RLE)算法。它不适用于沿着x轴颜色变化的从左至右的渐变。此外,使用诸如照片等自然图像对于算法来说也存在问题。与大量相同颜色的简单图形相比,动画这种图形会导致内存消耗大幅增加。从上到下的颜色渐变可以很好地压缩。
在特定的Qt许可证下提供。
了解更多。