【问题标题】:How to reduce QT program start-up time when using a DLL使用 DLL 时如何减少 QT 程序的启动时间
【发布时间】:2013-02-01 02:12:41
【问题描述】:

我的程序在启动过程中依赖于几个 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 秒似乎过多,对我来说表明存在更深层次的问题。我的期望是否在这里,这些加载时间是正常的?还是真的有什么问题(如果有,我应该调查什么)?

【问题讨论】:

    标签: qt dll load-time


    【解决方案1】:

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

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

    Here 就是一个很好的例子。

    【讨论】:

    • 我最终将延迟加载 DLL 作为临时解决方案。一旦我获得了更多的并行编程经验,我认为您的建议将是可行的方法。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2018-05-20
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多