2016-11-14 27 views
0

DLLの代わりにexeをCまたはC++コード内で使用する可能性について検討していました。いくつかのケースでは、exeを使用して引数を渡すことが考えられます。 (私はDLLのようにメイン関数を何らかの形でロードしていると思います)。
私たちが疑問に思っていた質問は、パフォーマンスのコストを意味します(特に、複数回の繰り返しを含むループ)。
私は既存のスレッドを調べようとしましたが、誰もこの特定の質問に答えませんでした。 DLLからの関数の呼び出しにはの最初の呼び出しではのオーバーヘッドがありましたが、その後の呼び出しではには1または2の命令しかかかりませんでした
exeの場合、別のプロセス
を実行するために、毎回という別のプロセスを作成する必要があります(オープンするシェルを開く必要がある場合は2番目のプロセスですが、私の研究では、シェル)。このプロセスの作成には、私が推測するほどのパフォーマンスが必要です。さらに、私はEXEがを毎回RAMにロードし、プロセスの終わりに破棄し、次の呼び出しのために再ロードするなどと考えています。 DLLに(?)存在しない問題。
PS:私たちは、この問題を理論的なレベルで議論していましたが、それはそれを実装するよりも、学習のための質問です。
DLLと比較してexeパフォーマンスコストを呼び出す

+0

呼び出しのオーバーヘッドに約10000の違いがあります。実際の作業に数秒かかる場合でも、これは問題ではありません。 – MSalters

答えて

0

明らかに、DLLがロードされ、短時間で何回も呼び出すと、利点があります。呼び出し間の時間が十分に長い場合、DLLの内容はRAMから削除され、再度ディスクからロードする必要があります(はい、指定が難しく、システムのメモリ使用量によって一部異なります)。

しかし、実行可能ファイルはメモリにキャッシュされるため、「実行ファイルを読み込む」コストはそれほど大きくありません。はい、新しいプロセスを作成し、最後にすべての関連するメモリ管理コードを使用してプロセスを破壊する必要があります。小さな実行可能ファイルの場合、これは比較的軽い作業ですが、大規模で複雑な実行可能ファイルの場合、かなり長い時間がかかることがあります。

同じプログラムを何度も実行することは、大規模なプロジェクトをコンパイルすることや、数多くのファイルに対して何らかのスクリプトを実行することなど、珍しいことではありません。このため、OSの開発者はこのパフォーマンスをチューニングします。

明らかに、「RAM内のものを保持する」は、DLLとEXEの両方に適用されます。これは、OSによって実行される基本的なファイルキャッシングです。

1

exeを実行するコストは、DLLから関数を呼び出す場合に比べて膨大です。 DLLでこれを行うことができれば、パフォーマンスが重要であるかどうかを判断する必要があります。

もちろん、考慮すべき他の要素があるかもしれません:例えば、コードにバグがあり、プロセスをクラッシュさせた場合、exeの場合、それは単にダウンするexeです。呼び出し元は残っていますが、バグがDLL内にあれば、呼び出し元もクラッシュします。

関連する問題