- PR -

プロジェクト分割単位

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2008-04-03 22:23
DLL で分けるということはシステム全体が 1つのプロセスとして実行されるということですよね。この場合、ひとつの UI スレッドを共有することになるのではないでしょうか。50の機能(フォーム)のうちの複数を同時に起動したときに、行儀の悪い機能(フォーム)が UI スレッドを停滞させてしまったとにシステム全体の機能停止を引き起こすリスクがあるように思います。

各機能(フォーム)が UI スレッドを停滞させずにワーカースレッドで処理をおこなったとしても、UI 操作など、いくつかの場面で UI スレッドへの同期化が出てきますよね。そういったことを考えると、DLL での実装はパフォーマンス面で不利になるように思えます。

それとも、各機能(フォーム)ごとに UI スレッド(メッセージループ)を持たせるようなことができますか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-04 10:41
引用:

未記入さんの書き込み (2008-04-03 22:23) より:

DLL で分けるということはシステム全体が 1つのプロセスとして実行されるということですよね。この場合、ひとつの UI スレッドを共有することになるのではないでしょうか。50の機能(フォーム)のうちの複数を同時に起動したときに、行儀の悪い機能(フォーム)が UI スレッドを停滞させてしまったとにシステム全体の機能停止を引き起こすリスクがあるように思います。

各機能(フォーム)が UI スレッドを停滞させずにワーカースレッドで処理をおこなったとしても、UI 操作など、いくつかの場面で UI スレッドへの同期化が出てきますよね。そういったことを考えると、DLL での実装はパフォーマンス面で不利になるように思えます。


途中から DLL という前提で派生的な質問に移行してしまったのですが、もし並列に単独起動可能という仕様があるならば exe というアセンブリを視野に入れるべきだと思います。(なので、敢えて 「アセンブリ」 としか書かないようにしました) 個人的には、ライブラリは当然のごとく DLL ですが、UI モノは exe を優先的に選択していることが多いですね。 デメリットとしてはそのアセンブリ (exe) が初回起動される時にやや遅いというところですね。(たいてい 1 秒以内のものですが)

どの選択をするかはシステム全体の仕様次第ではありますね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぱてお
常連さん
会議室デビュー日: 2008/03/07
投稿数: 41
投稿日時: 2008-04-04 17:26
引用:

未記入さんの書き込み (2008-04-03 22:23) より:
DLL で分けるということはシステム全体が 1つのプロセスとして実行されるということですよね。この場合、ひとつの UI スレッドを共有することになるのではないでしょうか。50の機能(フォーム)のうちの複数を同時に起動したときに、行儀の悪い機能(フォーム)が UI スレッドを停滞させてしまったとにシステム全体の機能停止を引き起こすリスクがあるように思います。

各機能(フォーム)が UI スレッドを停滞させずにワーカースレッドで処理をおこなったとしても、UI 操作など、いくつかの場面で UI スレッドへの同期化が出てきますよね。そういったことを考えると、DLL での実装はパフォーマンス面で不利になるように思えます。

それとも、各機能(フォーム)ごとに UI スレッド(メッセージループ)を持たせるようなことができますか。



うーん、これってリスクと呼んで良いのかなと言う気がしますけれど。
むしろ構造上の欠陥だと言う気がします。0.1秒ルールとかから考えると
問題があるつくりですよね。
こういう問題はテスト段階で排除されるべきだし、
そう考えるとリスクと呼んで良いのかなと。

UIスレッドを使ったマルチスレッドも構造的には可能でしょうけれど、
取り回しが面倒になりそうなのでやりたくないですね。
じゃんぬさんも書かれていますけれど、システムが要求する要件次第になると思います。
オペレーターが複数の画面を同時に開いていたとしても操作時に複数の画面を同時に
扱う場面と言うのはあまり多くないと思うのでそういう意味ではワーカースレッドで
うまくハンドリングしてやれば、UIスレッドは一つでも何とかなりそうな気がします。


[ メッセージ編集済み 編集者: ぱてお 編集日時 2008-04-04 17:26 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2008-04-04 19:04
引用:

ぱておさんの書き込み (2008-04-04 17:26) より:
UIスレッドを使ったマルチスレッドも構造的には可能でしょうけれど、
取り回しが面倒になりそうなのでやりたくないですね。
じゃんぬさんも書かれていますけれど、システムが要求する要件次第になると思います。
オペレーターが複数の画面を同時に開いていたとしても操作時に複数の画面を同時に
扱う場面と言うのはあまり多くないと思うのでそういう意味ではワーカースレッドで
うまくハンドリングしてやれば、UIスレッドは一つでも何とかなりそうな気がします。


問題はモーダルなダイアログ・画面などを使用したい場合ですね。
こういうことをやりたい場合は複数メッセージループを立ち上げるとかが必要になると思います。

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