DLLの代わりにexeをCまたはC++コード内で使用する可能性について検討していました。いくつかのケースでは、exeを使用して引数を渡すことが考えられます。 (私はDLLのようにメイン関数を何らかの形でロードしていると思います)。
私たちが疑問に思っていた質問は、パフォーマンスのコストを意味します(特に、複数回の繰り返しを含むループ)。
私は既存のスレッドを調べようとしましたが、誰もこの特定の質問に答えませんでした。 DLLからの関数の呼び出しにはの最初の呼び出しではのオーバーヘッドがありましたが、その後の呼び出しではには1または2の命令しかかかりませんでした。
exeの場合、別のプロセスを実行するために、毎回という別のプロセスを作成する必要があります(オープンするシェルを開く必要がある場合は2番目のプロセスですが、私の研究では、シェル)。このプロセスの作成には、私が推測するほどのパフォーマンスが必要です。さらに、私はEXEがを毎回RAMにロードし、プロセスの終わりに破棄し、次の呼び出しのために再ロードするなどと考えています。 DLLに(?)存在しない問題。
PS:私たちは、この問題を理論的なレベルで議論していましたが、それはそれを実装するよりも、学習のための質問です。DLLと比較してexeパフォーマンスコストを呼び出す
0
A
答えて
0
明らかに、DLLがロードされ、短時間で何回も呼び出すと、利点があります。呼び出し間の時間が十分に長い場合、DLLの内容はRAMから削除され、再度ディスクからロードする必要があります(はい、指定が難しく、システムのメモリ使用量によって一部異なります)。
しかし、実行可能ファイルはメモリにキャッシュされるため、「実行ファイルを読み込む」コストはそれほど大きくありません。はい、新しいプロセスを作成し、最後にすべての関連するメモリ管理コードを使用してプロセスを破壊する必要があります。小さな実行可能ファイルの場合、これは比較的軽い作業ですが、大規模で複雑な実行可能ファイルの場合、かなり長い時間がかかることがあります。
同じプログラムを何度も実行することは、大規模なプロジェクトをコンパイルすることや、数多くのファイルに対して何らかのスクリプトを実行することなど、珍しいことではありません。このため、OSの開発者はこのパフォーマンスをチューニングします。
明らかに、「RAM内のものを保持する」は、DLLとEXEの両方に適用されます。これは、OSによって実行される基本的なファイルキャッシングです。
1
exeを実行するコストは、DLLから関数を呼び出す場合に比べて膨大です。 DLLでこれを行うことができれば、パフォーマンスが重要であるかどうかを判断する必要があります。
もちろん、考慮すべき他の要素があるかもしれません:例えば、コードにバグがあり、プロセスをクラッシュさせた場合、exeの場合、それは単にダウンするexeです。呼び出し元は残っていますが、バグがDLL内にあれば、呼び出し元もクラッシュします。
関連する問題
- 1. タイプ比較のパフォーマンスコスト
- 2. アンマネージドDLLを呼び出すとvshost32.exeがクラッシュする
- 3. dllからexeへの関数呼び出し++
- 4. DLL内からEXE関数を呼び出す
- 5. exeとdllの間のC++呼び出しでエラーが発生しました
- 6. 可変メソッド呼び出しと比較した配列
- 7. Redux ApisコールとDirect API呼び出しの比較
- 8. バイナリ比較DLL
- 9. C#DLLによって呼び出されるEXE関数を公開する
- 10. golang呼び出しDLLについて
- 11. レスポンスフォームのajax呼び出しを確認して比較してください
- 12. DLLへの呼び出しからAPIへの呼び出し
- 13. dll(c)exeがどの関数を呼び出すかを調べるには?
- 14. 答えを比較して関数を呼び出す場合は、
- 15. Moqメソッドの呼び出し順序の比較
- 16. デストラクタを呼び出す方法の比較
- 17. VB.NET DLL内のVB.NETフォームからVB6 EXEファイルのVB6関数を呼び出す
- 18. 呼び出し.NET GUI ATL exeファイルサーバ(COM)
- 19. バッチファイル*から* EXEを呼び出す
- 20. ExitDialogでカスタムEXEを呼び出す
- 21. SQLスクリプトから.exeを呼び出す
- 22. DLLをexeとして起動する
- 23. パーザのトークンをハッシュテーブルのメソッドを呼び出すと比較する
- 24. rundll32.exeを使用してバッチからDLL呼び出し可能ファイルを作成する方法
- 25. メインで呼び出しを行わずにdll関数を呼び出す
- 26. スタートプロセスを使用して、.exe、間違ったパスを呼び出す.batファイルを呼び出しますか?
- 27. 呼び出し非DLL関数は
- 28. JavascriptからDLLメソッドを呼び出す
- 29. dll delphiで関数を呼び出す
- 30. VBからアンマネージDLLを呼び出す
呼び出しのオーバーヘッドに約10000の違いがあります。実際の作業に数秒かかる場合でも、これは問題ではありません。 – MSalters