如何在使用DLL时减少QT程序的启动时间

时间:2012-05-31 14:21:34

标签: qt dll load-time

我的程序在启动时依赖于几个DLL,包括来自QT本身的QtCore4.dll和QtGui4.dll以及来自National Instruments的ni488.dll。当我尝试使用cbw32.dll中的任何一个函数(在http://www.mccdaq.com/software.aspx的UniversalLibrary中找到一个5 MB的文件)时,我的程序突然需要5秒多的时间才能启动,而之前它已经瞬间启动了。有什么办法可以减少启动时间吗?就此而言,在那段时间发生的事情是OS是否主动链接这些功能,或者只是试图找到DLL?有没有办法减少DLL的大小,以便只包含与我的项目相关的东西?或者在可执行文件中包含该信息(换句话说,静态链接)?

编辑:并行加载DLL确实是一个很好的建议(以及我将继续使用的技术),但是没有达到我认为的核心问题。有一个5 MB的DLL需要5秒钟加载似乎过多,对我来说,这是一个更深层次的问题。我的期望是否在这里,这些加载时间是否正常?或者是否存在错误(如果是,我应该注意什么)?

2 个答案:

答案 0 :(得分:3)

为什么不在启动时在并行线程中动态加载这个dll?

HINSTANCE hGetProcIDDLL = LoadLibrary(L"library.dll");

Here就是一个很好的例子。

答案 1 :(得分:1)

我自己遇到了这个问题。我已经在这5秒多的启动延迟中生活了很长一段时间,但根据某人的建议,在暂停期间闯入调试器。似乎cbw32正在进行一些冗长的初始化,可能在DllMain中。我想有些硬件轮询/重置/在那段时间内正在进行的任何事情。

有人建议将/DELAYLOAD用于cbw32.dll,这可以消除延迟,但我还没有在具有适用主板的系统上测试功能......