早上好。大家。
我正在使用qt 4.8。 (嵌入式linux) 服务器应用程序正在使用qprocess()执行客户端应用程序。此时,客户端应用程序加载缓慢,因此当用户看到系统时系统似乎暂停。
我认为缓慢的原因是将外部库加载到内存中的时间。所以我想知道当服务器应用程序通过init进程时,是否有一种方法可以预加载客户端应用程序使用的库。
如果有更好的方法,请告诉我。谢谢。
答案 0 :(得分:1)
由于其他应用程序必须在启动时加载自己的库,这不是一件容易的事,但是你可以通过准备所需的应用程序及其库来从ramdisk加载而不是从硬盘加载来绕过缓慢的加载。磁盘。
在主应用程序中使用mount
创建RAM磁盘sudo mount -t tmpfs -o size=200M none /mnt/ramdisk
复制所有必需的文件并设置$LD_LIBRARY_PATH
作为指向您的ramdisk(Qt)的环境
auto env = QProcess::systemEnvironment();
env.insert("LD_LIBRARY_PATH","/mnt/ramdisk");
将新环境设置为QProcess的环境。由于我不是100%确定这将从那里加载您的库,作为替代方案,您可以在chroot环境中的chroot
中创建/usr/lib
环境并设置库。
我们的想法是将从RAM加载的库和应用程序放入RAM,这比从磁盘加载要快得多。
答案 1 :(得分:0)
预加载和预链接可能会有所帮助。从未使用它们,但发现了一些文档:https://wiki.archlinux.org/index.php/Preload