[英]How to handle large Qt resource files on a system with a very slow storage?
嵌入式系统具有运行Qt Quick应用程序所需的硬件,具有良好的CPU和良好的GPU,但具有极慢的非易失性存储器。
由于GUI有很多图像,我有以下困境:
有没有一种很好的方法来使用Qt资源管理系统在后台加载资源? 应该加载主GUI中使用的图像,同时启动画面显示一个很好的进度条,其余的可以在主应用程序启动后在后台静默加载。 如果我可以有选择地加载并释放某些资源文件(在应用程序的某些状态下不需要一些资源文件,那么一个很好的补充就是如此,如果我可以释放一些内存那就太好了)
有没有一种优雅的方法来解决这个Qt资源系统,或者我是否必须手动管理我的所有图像?
提一些笔记似乎很有帮助(根据我的经验):
qrc
资源文件中。 它们的尺寸应该很小。 asynchronous
属性)。 Loader
元素来加载大型/复杂组件。 rcc
文件)或使用本机文件系统似乎是有帮助的。 因此,您不希望资源嵌入到应用程序中,因为这会使可执行文件膨胀并且加载速度太慢,并且您不希望应用程序外部的资源,因为它们加载速度太慢?
首先,作为可执行文件中的资源并不意味着您是准备在内存中使用的对象。 在大多数情况下,您仍然必须将该数据加载到Qt对象中,例如将图像文件加载到QImage
。 你仍然会得到那个延迟。 除非这部分数据在内存中分页,否则它不会比直接从磁盘读取更快。
你可以做的最好和最重要的事情是掩盖延迟。 只有在您知道每个应用程序状态需要哪些资源时才可以执行此操作,并且每次更改状态时,都会加载可以从当前状态进入的状态所需的所有数据。 这样就可以提前加载资源,希望在你进入需要的新状态之前。 缺点 - 您将不得不继续跟踪这些对象,并且您将有内存开销 - 因为您可能正在为多个状态加载数据但只输入一个。 好处 - 大多数加载可以对用户隐藏,并且您只预加载整个数据的子集,而不是所有数据。 当然,尽可能减少资源的占地面积是必须的。
除此之外,你无能为力。 如果您的存储速度很慢,那么最好的解决方案是升级它,如果可以的话,那就是第二好 - 对硬件的期望是切合实际的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.