- PR -

.NET Windowsフォームのパフォーマンスについて

投稿者投稿内容
松竹梅
会議室デビュー日: 2002/12/26
投稿数: 6
投稿日時: 2004-10-17 00:45
 ハードウェアの処理能力がそのままなら、遅くなって当然ですが。。。
 そのへんはどうですか?

 あと、Release 構成ではどうですか?
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-17 02:23
南部です。

なんとなく、ボタン200個貼り付けてみました。
初回実行は1秒弱、2回目以降は0.5秒くらい

ボタンじゃ、軽すぎかなぁと
データグリッド200個いってみました。
初回実行1秒くらい、2回目以降1秒弱

まあ、ただ貼り付けただけですけど。

環境は
Window Server 2003
.NET Framework1.1 SP1
Pen4 2.53GHz
1GB RAM
です。

引用:

jemini_777さんの書き込み (2004-10-15 23:27) より:

Dim sForm As frmABC = New frmABC  ←ここが遅い!




このクラスのコンストラクタでインスタンス生成以外に
時間かかっていそうなところはないですか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-17 06:41
引用:

nanbuさんの書き込み (2004-10-17 02:23) より:

なんとなく、ボタン200個貼り付けてみました。
初回実行は1秒弱、2回目以降は0.5秒くらい

ボタンじゃ、軽すぎかなぁと
データグリッド200個いってみました。
初回実行1秒くらい、2回目以降1秒弱

まあ、ただ貼り付けただけですけど。


 同じく、コンボボックスを200個貼り付けてみました。2秒以内に終わってますね。(InitializeComponentメソッド呼び出しの前後で計測)



 「時間がかかる」というときの“常識”ですが、「どの処理で、どれだけの時間がかかっているか、明確にする。処理が細分化できる限り細かく調べる」ということです。

 たとえば、インスタンス化の中でデータベースとの接続をしてて、そちらで時間がかかっているなら、「Windowsフォームのパフォーマンス」が問題ではないですよね。呼び出し元で「コンストラクタで時間がかかっている」ことはわかりました。では、コンストラクタの中身を、細分化しましょう。
_________________
jemini_777
会議室デビュー日: 2003/12/05
投稿数: 17
投稿日時: 2004-10-18 08:09
お世話になります。

フォームの開き方は以下のようにしておりますのでインスタンスの生成に時間がかかっているとは思うのですが自分なりに検証してみました。
Dim sForm As frmABC = New frmABC  ←ここが遅い!
sForm .Show() ※ダイアログではない。

空のプロジェクトで以下の内容で起動時の時間を取得
テキストボックス×200個 1271.8288ミリ秒
コンボボックス ×200個 3284.7232ミリ秒
INPUTMANのEDITボックス ×200個 4176.0048ミリ秒
INPUTMANのコンボボックス  ×200個 3705.328ミリ秒

それほど遅くはないです。

実際はパネル・スプレッドシート・ラベルなど組み合わせておりますので
単純比較はできないですが。

まだまだ検証してみます。

開発マシン
cup celelon2.4Ghz
mem 1G
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2004-10-18 09:13
引用:

データグリッド200個いってみました。
初回実行1秒くらい、2回目以降1秒弱



データグリッドでも、バインドしなければそんなもんですか (^^;;;
とすると、コントロールの作成以外のところで cpu を消費している可能性が高いですね。

_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-10-18 16:13
引用:

Dim sForm As frmABC = New frmABC  ←ここが遅い!
sForm .Show() ※ダイアログではない。


frmABCのコンストラクタで何か別の処理してませんか?
それかForm_Loadイベントあたりで
DBへ接続してデータを取得しているとか
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-10-18 16:29
引用:

Kazukiさんの書き込み (2004-10-18 16:13) より:
引用:

Dim sForm As frmABC = New frmABC  ←ここが遅い!
sForm .Show() ※ダイアログではない。


frmABCのコンストラクタで何か別の処理してませんか?
それかForm_Loadイベントあたりで
DBへ接続してデータを取得しているとか


New が遅いとの事なので、ロードのタイミングまで行ってないでしょうね。
コンストラクタ内(InitializeComponent呼び出し後の部分)でいろいろと処理をやっているなら、そこが原因の可能性はありますが。

コントロール大量の件ですが、プロパティ等の設定を追加すると10倍遅くなるかもしれません、なんとなく。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-18 21:03
引用:

渋木宏明(ひどり)さんの書き込み (2004-10-17 00:29) をパクります:

パフォーマンスの劣化が無くても、1枚のフォームにコントロールを100個も200個も散りばめるような設計はこの機会に見直すべきだと思いますが。

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