1

我的程序在启动过程中依赖于几个 DLL,包括 QT 本身的 QtCore4.dll 和 QtGui4.dll 以及 National Instruments 的 ni488.dll。当我尝试使用 cbw32.dll(在http://www.mccdaq.com/software.aspx的 UniversalLibrary 中找到的 5 MB 文件)中的任何函数时,我的程序突然需要 5 秒以上才能启动,而之前它立即这样做了。有什么办法可以减少启动时间吗?就此而言,那段时间发生了什么,操作系统是主动链接函数,还是仅仅试图找到 DLL?有什么方法可以减小 DLL 的大小以便只包含与我的项目相关的内容?或者将该信息包含在可执行文件本身中(换句话说,静态链接)?

编辑:并行加载 DLL 确实是一个不错的建议(以及我将在未来使用的技术),但并没有解决我认为的核心问题。加载一个 5 MB 的 DLL 需要 5 秒时间似乎过多,对我来说这表明存在更深层次的问题。我的期望在这里吗?这些加载时间是正常的吗?还是真的有什么问题(如果是,我应该调查什么)?

4

2 回答 2

3

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

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

是一个很好的例子。

于 2012-05-31T14:33:47.437 回答
1

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

有人建议使用/DELAYLOADfor cbw32.dll,它消除了滞后,但我还没有在具有适用板的系统上测试功能......

于 2013-01-31T17:47:46.203 回答