LoginSignup
1
1

More than 5 years have passed since last update.

c# 画面コントロール生成時の処理速度改善

Posted at

よろしくお願い致します。

前提・実現したいこと

c#にて、
事前に設定した質問と解答を
dbから取得し動的にコントロールを
配置するシステムを作っています。
コントロール生成に時間がかかってしまい
ここの速度をあげたいです。
現在、100コントロールで3秒程度。
これを1秒程度にしたい。
また、速度アップが無理であれば
他の仕様に変更することも可能。

発生している問題・エラーメッセージ

画面にはtabcontrolの上に
layoutflowpanelを乗せ
その上にコントロールを追加しています。

追加するコントロールは
その都度dbから取得しています。
基本的には例えば以下のようなコントロールを
追加しています。

氏名 ラベル
氏名解答欄 テキストボックス
生年月日 ラベル
生成月日解答欄 ラジオボタン
(元号 大.昭,平)
テキストボックス3つ
(年、月、日)

ソースとしては以下のような形です
FlowLayoutPanel flowPanel = new FlowLayoutPanel();
flowPanel.Dock = DockStyle.Fill;
flowPanel.FlowDirection = FlowDirection.TopDown;
flowPanel.AutoScroll = true;

this.Controls.Add(flowPanel);
※下記は1つのボタンですが
ここはdb内容を見ながら都度
コントロールインスタンス生成を
しながら動的に作成。
下記はプロパティ設定はtextのみだが
実際にはsizeなど
他のプロパティ設定もある。

Button button = new Button();
button.Text = i.ToString();

flowPanel.Controls.Add(button);

試したこと

速度アップのため、ソースの見直しをしましたが
なかなかうまくいかないため、
マルチスレッド化を検証。

上記ソースにて画面を動的生成するのは
2つ目のタブである。
1つ目のタブに関しては
画面は固定で生成している。

そのため、2つ目の画面生成を
マルチスレッド化して
2つ目画面生成をしている間に
1つ目タブの固定画面に対して
ユーザーからの入力を受け付けようとしたが
マルチスレッド側にて画面生成をしているため
1つ目のタブのテキストボックスなどに
入力ができない(画面が触らない)
※お客様としては、2つ目のタブ画面生成時に
1つ目のタブ画面のコントロールに
入力が出来れば最悪仕様としては良い。

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

言語 c# 2014
画面はlayout flow panelで動的に作成

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1