- PR -

Formの遷移方法

1
投稿者投稿内容
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-02-20 15:00
Windowsフォームを遷移していくアプリケーションを作成する際の質問です。

いくつものフォームを遷移しながら処理を進めていくアプリを作成する際に、

1.exeを遷移していく
2.exeからdllを遷移していく

の2つの方法が頭に思い浮かぶのですが、どちらの方法が効率的(開発パフォーマンスもPGパフォーマンスも含めて)なのでしょうか?
それとも、もっと良い方法が?

アドバイスをよろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-21 22:26
諸農です。

ひとつのexeとなるプログラムに複数のFormを持たせるのはダメですか?

引用:

の2つの方法が頭に思い浮かぶのですが、どちらの方法が効率的(開発パフォーマンスもPGパフォーマンスも含めて)なのでしょうか?



case-by-caseではないでしょうか。
開発パフォーマンスと言っても、チーム開発の場合はどうするとか
一人で開発する場合はどうとか、プログラムパフォーマンスも
軽いフォームならひとつのexeとなるプログラムに含めても大丈夫で
しょうし。。

簡単には答えが出そうにないですね(^^
答えに近づくためには、自分自身で納得いくまでたくさんのアプリケ
ーションを作って、自分なりの結果を出してみることではないでしょうか。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 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を起動した時点で全てメモリに展開されてしまうのでしょうか?そうだとするとメモリに負荷がかかるし。。。

うぅぅぅぅ。。。
分からん!!
両方やってみますかね。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-22 01:36
諸農です。

引用:

<案2>の方はdllは最初のexeを起動した時点で全てメモリに展開されてしまうのでしょうか?そうだとするとメモリに負荷がかかるし。。。



メモリのロードのところは実際どうなるかはわかりませんが、
もしも私が一人で開発するなら案2を選択するでしょうね。
各DLLに含まれるフォームをメインのフォームが管理するようにする、
もしくは呼び出しフォームが管理するのでれば、アプリケーションの
見通しが良くなると思うからです。

#Assembly.LoadFrom()でロードしてexeアセンブリに含まれるフォ
#ームのインスタンスを作って使うっていう話ならどっちでもいいの
#ですが、Process.Start()でexeのプロセスを起動するってことな
#ら、やはりDLL形式で作る方を選択すると思います。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
きよの
常連さん
会議室デビュー日: 2004/02/07
投稿数: 34
投稿日時: 2004-02-22 01:44
きよのと申します。

引用:

adtkさんの書き込み (2004-02-22 00:56) より:
<案1> exe1→exe2→exe3→exe4→exe5→・・・
<案2> exe→dll1→dll2→dll3→dll4→・・・

この2つの案のどちらかでと考えています。しかし、
<案1>は毎回exeが起動するということは、画面遷移するたびに負荷がかかりそうですし、大量の引数を渡すことになるため、その方法もどうすれば?といった感じです。

<案2>の方はdllは最初のexeを起動した時点で全てメモリに展開されてしまうのでしょうか?そうだとするとメモリに負荷がかかるし。。。



普通は、<案2>の方でやると思うのですが。
<案1>の方はもっと大きな単位でならやると思うのですが。例えば、DVD書き込み機能付きの動画編集ソフトを作る場合などは、DVD書き込み機能の部分を別EXEにしたりとか。
EXE から EXE を起動する場合に、大量にデータを引き継ぎたい場合は、共有メモリを使うとか、ファイルとかDBに一時的に格納するとかいろいろ方法はあります。

で、<案2>の方ですが(実際今のプロジェクトでこれをしています)、DLLは最初に使用されるときにロードされるようです。なので、初期状態では最初の EXE のみがロードされた状態になります。もし心配なのでしたら、Assembly.Load() メソッドを使われてみては?
もし、DLLが最初にロードされてしまったとしても、メモリの消費量はそんなに大きくはないのでは?50画面程度でしたら DLL 全部合せても、せいぜい数MB なのではないですか?

# 書き直している間に Jubei さんとかぶってしまいました...
adtk
ベテラン
会議室デビュー日: 2004/02/06
投稿数: 75
投稿日時: 2004-02-22 23:57
丁寧な返答ありがとうございます。
案2--exeからdllを呼び出していく方法で進めて行こうと思います。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-02-24 12:34
dllのメモリへのロードについてだけ、ちょっと補足。

.NET Frameworkはdll全体を一度にメモリにロードするわけでは
ありません。
メソッド単位で、そのメソッドが呼び出されたとき、はじめて
ILからネイティブにコンパイルされ、メモリ上にロードされます。

#だったはず。

上記はdllだけの話ではなく、1つのexeファイルであっても
同じような手順が踏まれているはずです。
1

スキルアップ/キャリアアップ(JOB@IT)