質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Vulkan

Vulkanは、業界団体クロノスグループが規格化したグラフィックスAPI。主にゲームエンジンやゲームアプリケーション向けのグラフィックに最適化されており、ローレベル(low level)APIです。3Dオブジェクトを用いたアニメーションを使用するゲームで性能を最大限に発揮します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

Q&A

解決済

1回答

1128閲覧

DLL経由で関数を呼ぶと動作が重くなるんですか?

退会済みユーザー

退会済みユーザー

総合スコア0

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

Vulkan

Vulkanは、業界団体クロノスグループが規格化したグラフィックスAPI。主にゲームエンジンやゲームアプリケーション向けのグラフィックに最適化されており、ローレベル(low level)APIです。3Dオブジェクトを用いたアニメーションを使用するゲームで性能を最大限に発揮します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3DCG

コンピュータの演算により、3次元空間の仮想物体を、2次元平面上で表現する手法である。

0グッド

0クリップ

投稿2020/10/04 06:10

編集2020/10/04 06:26

あまりに基礎的な質問ですみません。簡潔に話すとC++でDLLを作ったのですが、DLLではなく実行ファイル(exe)に初めから埋め込められている状態で動かす状態より、遥かに動作が重くて使いものになりませんでした。で、気になったのですがDLL経由で関数を作ると動作が重くなるのでしょうか?

詳しく話すと下記のgithubを参考にVulkanで三角形を表示するプログラムを書きました。
https://github.com/bwasty/vulkan-tutorial-hpp/blob/master/steps/15_hello_triangle.cpp

で、その次に下記のgithubを参考に、毎フレームごとにウィンドウに表示されている画像をコピーする関数を作って毎フレーム呼び出しました。
https://github.com/SaschaWillems/Vulkan/blob/master/examples/screenshot/screenshot.cpp

この時点では動画は60fpsでも非常に軽く問題はありませんでした。

ところが、その毎フレームごとにウィンドウに表示されている関数をDLL経由で使用したら、動作が非常に重くて使い物になりませんでした。私のPCの環境のタスクマネージャーで普通にexeに埋め込まれている時から5倍から重くなりました。

一体どういうことなのでしょうか?よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/10/04 06:24 編集

DLLにすると最適化してもインライン展開出来ないので遅くなる可能性はありますが、まずボトルネックになっている個所のプロファイリングを行い、どこでどのくらい遅くなっているかを調査した方が良いかと思われます。
dodox86

2020/10/04 06:27

OSであるWindowsでも多くの基幹的な機能がDLLで提供されているので、DLLにしたからといって即、極端に遅くなるということは考えづらいです。DLLがデバッグバージョンであるままであるとか、DLLにした際の関数インターフェース仕様がDLLではないときとまるっきり違う、とか、そういうことはありませんか。コード自体が違うのであれば、比較の仕方も変わってくるはずです。
kuma_kuma_

2020/10/04 06:31

質問させて まず「Vulkanで三角形を表示するプログラム」があります。 これは1画面に対して描写を行う処理です 「毎フレームごとにウィンドウに表示されている画像をコピーする関数」 これは1フレームごとにスクリーンショットを作成する処理だよね? これをはじめはexeとして1つにして実行していた。この時は問題なかった。 しかし「毎フレームごとにウィンドウに表示されている画像をコピーする関数」をdll化したら遅くなった という事でいいかな?
退会済みユーザー

退会済みユーザー

2020/10/04 06:55

>kuma_kuma_さん はい、その通りです。
kuma_kuma_

2020/10/04 07:06

まず「毎フレームごとにウィンドウに表示されている画像をコピーする関数」 これどうやっても1フレームで終わる処理ではありません。 exeの際はきちんと1フレーム毎のキャプチャがされていまいたか? (1秒で60枚作成されていましたか?) 想定ですがexe内では同期実行な為キャプチャ自体は10fpsぐらいで行われていたように思います。 それがDLL化したことによって複数同時実行が可能となりCPUに負荷を与える結果となっている。 想定となりますがどうでしょうか?
退会済みユーザー

退会済みユーザー

2020/10/04 07:14

>kuma_kuma_さん >想定ですがexe内では同期実行な為キャプチャ自体は10fpsぐらいで行われていたように思います。 >それがDLL化したことによって複数同時実行が可能となりCPUに負荷を与える結果となっている。 >想定となりますがどうでしょうか? おそらく、その可能性が高いですね。まずはその辺りについて調べてみます
guest

回答1

0

ベストアンサー

kuma_kuma_さんの言うとおりでした。
きちんと調べたら毎フレームきちんとコピーしているわけではありませんでした。
ありがとうございました。

投稿2020/10/04 07:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問