- - PR -
Formの遷移方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-20 15:00
Windowsフォームを遷移していくアプリケーションを作成する際の質問です。
いくつものフォームを遷移しながら処理を進めていくアプリを作成する際に、 1.exeを遷移していく 2.exeからdllを遷移していく の2つの方法が頭に思い浮かぶのですが、どちらの方法が効率的(開発パフォーマンスもPGパフォーマンスも含めて)なのでしょうか? それとも、もっと良い方法が? アドバイスをよろしくお願いします。 | ||||
|
投稿日時: 2004-02-21 22:26
諸農です。
ひとつのexeとなるプログラムに複数のFormを持たせるのはダメですか?
case-by-caseではないでしょうか。 開発パフォーマンスと言っても、チーム開発の場合はどうするとか 一人で開発する場合はどうとか、プログラムパフォーマンスも 軽いフォームならひとつのexeとなるプログラムに含めても大丈夫で しょうし。。 簡単には答えが出そうにないですね(^^ 答えに近づくためには、自分自身で納得いくまでたくさんのアプリケ ーションを作って、自分なりの結果を出してみることではないでしょうか。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-02-22 00:56
そうか。。やっぱり一概に何がよいとは言えないのですね。
では、少し質問を変えます。 今回は、合計50ほどのFormの遷移になるので、1つのexeにまとめると言うのは少し無理があると思いますので、各機能ごとにプロジェクトを分け、以下のように <案1> exe1→exe2→exe3→exe4→exe5→・・・ <案2> exe→dll1→dll2→dll3→dll4→・・・ この2つの案のどちらかでと考えています。しかし、 <案1>は毎回exeが起動するということは、画面遷移するたびに負荷がかかりそうですし、大量の引数を渡すことになるため、その方法もどうすれば?といった感じです。 <案2>の方はdllは最初のexeを起動した時点で全てメモリに展開されてしまうのでしょうか?そうだとするとメモリに負荷がかかるし。。。 うぅぅぅぅ。。。 分からん!! 両方やってみますかね。 | ||||
|
投稿日時: 2004-02-22 01:36
諸農です。
メモリのロードのところは実際どうなるかはわかりませんが、 もしも私が一人で開発するなら案2を選択するでしょうね。 各DLLに含まれるフォームをメインのフォームが管理するようにする、 もしくは呼び出しフォームが管理するのでれば、アプリケーションの 見通しが良くなると思うからです。 #Assembly.LoadFrom()でロードしてexeアセンブリに含まれるフォ #ームのインスタンスを作って使うっていう話ならどっちでもいいの #ですが、Process.Start()でexeのプロセスを起動するってことな #ら、やはりDLL形式で作る方を選択すると思います。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||
|
投稿日時: 2004-02-22 01:44
きよのと申します。
普通は、<案2>の方でやると思うのですが。 <案1>の方はもっと大きな単位でならやると思うのですが。例えば、DVD書き込み機能付きの動画編集ソフトを作る場合などは、DVD書き込み機能の部分を別EXEにしたりとか。 EXE から EXE を起動する場合に、大量にデータを引き継ぎたい場合は、共有メモリを使うとか、ファイルとかDBに一時的に格納するとかいろいろ方法はあります。 で、<案2>の方ですが(実際今のプロジェクトでこれをしています)、DLLは最初に使用されるときにロードされるようです。なので、初期状態では最初の EXE のみがロードされた状態になります。もし心配なのでしたら、Assembly.Load() メソッドを使われてみては? もし、DLLが最初にロードされてしまったとしても、メモリの消費量はそんなに大きくはないのでは?50画面程度でしたら DLL 全部合せても、せいぜい数MB なのではないですか? # 書き直している間に Jubei さんとかぶってしまいました... | ||||
|
投稿日時: 2004-02-22 23:57
丁寧な返答ありがとうございます。
案2--exeからdllを呼び出していく方法で進めて行こうと思います。 | ||||
|
投稿日時: 2004-02-24 12:34
dllのメモリへのロードについてだけ、ちょっと補足。
.NET Frameworkはdll全体を一度にメモリにロードするわけでは ありません。 メソッド単位で、そのメソッドが呼び出されたとき、はじめて ILからネイティブにコンパイルされ、メモリ上にロードされます。 #だったはず。 上記はdllだけの話ではなく、1つのexeファイルであっても 同じような手順が踏まれているはずです。 |
1