是否可以为特定项目禁用 Qt 5.8 中的 QML 缓存?
Can QML caching in Qt 5.8 be disabled for a particular project?
Qt 5.8 本来应该附带可选的提前使用 qtquick 编译器,但它附带了一种 jit 编译器,这是一种默认启用的功能,可将编译后的 QML 文件缓存在磁盘上为了提高启动性能和减少内存使用。
然而,该功能随 serious bugs 一起出现,这大大减少了,或者在我的情况下甚至完全否定了它的好处,因为我一开始就没有启动时间问题,而且测试没有显示任何内存使用改进。
所以我想做的是在我的项目中选择退出该功能,但我似乎没有找到如何做到这一点。回到 Qt 5.7.1 不是一个选项,因为我的项目依赖于 5.8 引入的其他新功能。
将 QML_DISABLE_DISK_CACHE
(设置为 1)添加到您的环境变量。您应该能够通过 qputenv
在您的应用程序中执行此操作——在加载 QML 内容之前将其放在 main
中的某处。
感谢 peppe 告知我们环境变量,但 qputenv()
仅将 QByteArray
作为值参数,因此 1
将不起作用。
两个可行的选项:
qputenv("QML_DISABLE_DISK_CACHE", "1"); // or
qputenv("QML_DISABLE_DISK_CACHE", "true");
这将成功禁用缓存并防止相关错误出现。
Qt 5.8 本来应该附带可选的提前使用 qtquick 编译器,但它附带了一种 jit 编译器,这是一种默认启用的功能,可将编译后的 QML 文件缓存在磁盘上为了提高启动性能和减少内存使用。
然而,该功能随 serious bugs 一起出现,这大大减少了,或者在我的情况下甚至完全否定了它的好处,因为我一开始就没有启动时间问题,而且测试没有显示任何内存使用改进。
所以我想做的是在我的项目中选择退出该功能,但我似乎没有找到如何做到这一点。回到 Qt 5.7.1 不是一个选项,因为我的项目依赖于 5.8 引入的其他新功能。
将 QML_DISABLE_DISK_CACHE
(设置为 1)添加到您的环境变量。您应该能够通过 qputenv
在您的应用程序中执行此操作——在加载 QML 内容之前将其放在 main
中的某处。
感谢 peppe 告知我们环境变量,但 qputenv()
仅将 QByteArray
作为值参数,因此 1
将不起作用。
两个可行的选项:
qputenv("QML_DISABLE_DISK_CACHE", "1"); // or
qputenv("QML_DISABLE_DISK_CACHE", "true");
这将成功禁用缓存并防止相关错误出现。