1

私のプログラムは、QT自体のQtCore4.dllとQtGui4.dll、National Instrumentsのni488.dllなど、起動時にいくつかのDLLに依存しています。cbw32.dll(UniversalLibraryのhttp://www.mccdaq.com/software.aspxにある5 MBのファイル)の関数のいずれかを使用しようとすると、プログラムの起動に5秒以上かかります。それは瞬時に行われました。起動にかかる時間を短縮するためにできることはありますか?さらに言えば、その間に何が起こっているのでしょうか。OSはアクティブに機能をリンクしているのでしょうか、それとも単に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 に答える