• 締切済み

【C#】マネージドDLLによる負荷

1.C#で作成したマネージドDLLを参照し、ImportしてDLL内のクラスを使う方法 2.DLLにせず、直接ソースを取り込んでひとつのexeファイルとしてしまう方法 1と2ではパフォーマンス的にどちらが有利とかあるでしょうか。 アンマネージドDLLの場合、静的リンクや動的リンクなど、実装によって 多少のパフォーマンス差が出ることがありますが マネージドDLLでも何かパフォーマンス差が発生するのだろうかと ふと疑問に思い質問させていただきました。 私的にはJavaのjarファイルのような扱いと考えている(実行時には展開される)ので DLLにしたことによってパフォーマンス差はあまり出ないと考えているですが あっているでしょうか。 よろしくお願いいたします。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.1

既にリンク済みの状態か、実行時にリンクするかの違いなので 実行が開始されるまでの差はあるかもしれませんが 実行開始されてしまえば差はほとんどないはずです。 ただし同じDLLを複数の実行ファイルで利用する場合と、 DLLに当たる部分を実行ファイルそれぞれに組み込んだ状態の場合では 後者の方がメモリを圧迫する可能性はあります。

関連するQ&A

  • マネージドDLLをC++からLoadLibrary

    プログラムの環境設定、実装についての質問になります。 (1)VS2013 C#で作成したDLL を  (2)MFCプロジェクトからLoadLibrary関数を使い呼び出す方法があれば教えてくれませんか? (1)にCOMとして参照する設定を行い、COMとして扱うのでしたら ネットでいくつか方法がありましたが、今回はDynamicLinkLibraryとして扱いたいです。 この場合、C++/CLIを用いる事になるのでしょうか。。 全く予想つかなく悩んでおります。何か参考となるURLなどでも構いません。 何卒宜しくお願いします。

  • .jarおよび.dllについて

    あるJavaの.jarと拡張子のついたプログラムファイル(一緒に.dllファイルを含む)をダウンロードしたのですが、うまくプログラムを走らせることができません。 Java自体扱ったことがなく、どうしたらよいのかわかりません。 javaのバージョンは"jdk1.6.0_11"です。 何かアドバイスがあれば、よろしくお願いします。

  • VBから参照できないCのDLLを使用する方法

    Cで作成されたDLLがあるのですが、VBから参照設定しても「指定されたファイルへの参照は登録できません。」と怒られます。 そのようなDLLをどうしてもVBから使用したい場合はどうすれば良いでしょうか? 直接は無理だとしても、間に何かをかましてできると思うのですが、良い方法があれば教えてください。 ちなみに VB6 です。 よろしくお願いします。

  • DLLとインポート、エクスポート

    環境 Microsoft Visual C++ DLLはWin32 Dynamic-Link Library ExeはWin32 Application で作成しています。 DLLにメッセージボックスを表示するのみの処理の関数があり。 Exe側でその関数を使用したいだけです。 DLLのヘッダファイルにエクスポートしたい関数を _declspec(dllexport) void exportmain(); としています。 Exeではインポートを __declspec(dllimport) void exportmain(); としています。 プロジェクト⇒設定⇒リンクにlibファイルの設定もしています。 dll、libファイルの場所も問題ないと思います。 しかし、ビルドすると「外部シンボル~~未解決です」とエラーがでてしまいます。なにか原因がわかるかたおりましたら、ご教授お願い致します。

  • Javaの拡張ライブラリをインストールする時にdllファイルを使った

    あるJavaの拡張ライブラリ(下記URLのもの)をインストールする時に、extディレクトリにjarファイルを貼り付けて、さらに付属のdllファイルをsystem32ディレクトリに貼り付ける必要がありました。 あまり、拡張ライブラリをインストールしたことがなかったのですが、少し調べてみるとjarファイルをextディレクトリに置くのは普通らしいのですが、dllファイルを使うというのはあまり聞きません。 jarファイルにはクラスが入っていると思うのですが、dllファイルには、どのような意味があるのでしょうか? よろしくお願いします。 http://sourceforge.net/projects/netsnmpj

    • ベストアンサー
    • Java
  • exeファイルはどのdllを参照すべきか、知っているのでしょうか。

    dllとは、プログラムが実行時に参照するものですよね。 よく使われる機能があらかじめ作られているものですよね。 私はC言語しか知らないので、C言語でプログラミングすることで話を進めさせてください。 (とは言っても、ごく初歩的なプログラムが組めるだけの素人です。) OSはWindowsということにします。 C言語は、関数の集まりでソースが書かれています。 dllも、中身に関数の実体が記述されている、そういうイメージでしょうか。 私がもっと勉強して、複雑なプログラムを組んだりすると、 「あ、これはdllに実体がある機能だから、いちいち実装を書かなくてもいいんだな」 と考えて、ソースファイル( ~.c )の中でその関数を使うだろうと思います。 私がよくわからないのはここからです。 dllにある関数をソースで使って、無事コンパイルして、さあリンクしてexeを作りましょう、 というときに、リンカ(リンクを行うプログラム)は、 「そんな関数、実体がないぞ」 って文句を言ってこないのでしょうか。 いや、リンカは、dllに実体がある関数だということを知っているはず。 でもそれって、いちいち 「この関数はどこどこにある ○○.dll というdllに書いてあります」 というふうに、リンカに教えてあげなくてはいけないのでしょうか。 (それってまさか、ソースに書くわけじゃないですよね? ) それから、 exeファイルっていうのは「この機能はdllに行わせる機能だ」ということを知っているのでしょうか。 dllに行わせる機能だということを知っているとしても、 どのディレクトリにある なんと言う名のdllに その機能が書かれていることまで知っているのでしょうか。 (でもそこまで知っていたら逆に、ディレクトリ構成の違うマシンでは実行できなくなってしまうし。) そういうような原理的なことを教えてください。

  • 実行ファイルからdllを呼び出す際の情報について

    実行ファイル(exe)とdllの各バイナリだけあるとします。 exeがdllを呼び出す際の関数名とパラメータの内容を、外部ツール等で 簡単に参照することはできますでしょうか? 何かしら方法があるなら教えていただけると助かります。

  • 使用しているDLLを解析してくれるソフト(どんなDLLを使っているか)

    確か、フリーソフトでEXEなどのファイルを 選択すると、そのファイルが参照(使用?)している DLLを調べてくれるソフトがあったはずなのですが、 名前を忘れてしまいました。 どなたかご存知のかた教えて頂けませんか?

  • DLLを直接プログラム内に取り込んでEXEファイルを作れますか

    VC++.NETで開発を行う予定ですが、 そのときicmp.dllというDLLを使う予定です。 これに関する説明を読むと、将来サポートされない可能性があるとのことでした。 それで、このDLLをスタティックライブラリをリンクするように、EXE本体のなかに取り込んでおきたいのですが、そのようなことは、出来るのでしょうか。 つまり、icmp.dllのある環境で、exeファイルを作り、 icmp.dllのない環境で、そのexeファイルを実行させたいのですが、そのようなことはできるのでしょうか。

  • Unix上C++でのdllとインポートライブラリの関係

    こんにちわ。 いつも教えてgooにお世話になっているorange_pieです。 UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、 Unixでの基本的な考え方を教えてください。 (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?  ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。 (2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか? (3)配布されたdllを使う側では、Link時にインポートライブラリをリンクして、関連インクルードファイルをインクルードするだけで使えるのでしょうか? (4)上記の(2)のように、インポートライブラリとライブラリの実態を作成する為のコンパイルオプションが見つかりません。(ldのmanを見たのですが、意味がわからないと言うか。。。。。) この質問は、自作ライブラリからlibxxx.soという形のオブジェクトファイルを作り、別プログラムからこのlibxxxをコンパイルオプション(-l)でリンクしてみたら正しく動作したのですが、これでは結局ライブラリの本体が一緒にリンクされている様子で、出来上がった実行形式のファイルサイズが静的ライブラリとしてリンクした時と同じ大きさになっていることに疑問を抱いてしまったものです。  この状態でも、ライブラリの方だけコンパイルしなおして実行すると ちゃんとライブラリの変更点は反映されるので問題は無いのですが、 これでもダイナミックリンク・ライブラリと呼べるのでしょうか?