本当にお久しぶりです reaです
現在、ラベルの動的生成処理を作成しており
下記にて15個のラベルを3×5で生成しているのですが、
少しでも処理が軽くなるようにしたいです。(常に動的生成させたい為)
下記のソースで調整できる箇所がございましたら、ご指摘いただけますと幸いです。
また、下記のソースですが、For i= のループでも
やはり変わらないでしょうか。。
ご指摘いただけますと幸いです。
※下記のソースにてコントロールのクリア処理が抜けておりますが、
生成前にコントロールのRemove処理とDispose処理は必ず行っております。
<開発環境>
Visual Studio 2017
<ターゲットフレームワーク>
.NET Framework 3.5
<アプリケーションの種類>
Windows フォームアプリケーション
※動的生成を行うことの経緯ですが、現在はテストなので固定で15個ラベルを必ず生成するように
しておりますが、本来は[1~15]の間で、後続の処理を行った後に都度可変致します。
また、表示列が減る場合5個以下または10個以下の場合には
列を表示しないようにしたい為、動的に行っております。
VB.net
1 2'- 変数 3 Dim Test_Label() As Label '- 生成ラベル(15で固定) 4 Dim Width As Integer = 0 '- 縦位置 5 Dim Hight As Integer = 2 '- 横位置 6 Dim idx As Integer = 0 '- Index 7 8 '- New 9 Test_Label = New Label(15) {} 10 11 For Each d In Test_Label 12 13 '- 縦 14 If idx = 5 Or idx = 10 Then 15 Hight += 36 / VGA 16 End If 17 18 '- 横 19 Select Case idx 20 Case 0, 5, 10 : Width = 3 21 Case 1, 6, 11 : Width = 97 22 Case 2, 7, 12 : Width = 191 23 Case 3, 8, 13 : Width = 285 24 Case 4, 9, 14 : Width = 379 25 End Select 26 27 '- Property 28 d = New Label With { 29 .Name = "Label_" & idx, 30 .Size = New System.Drawing.Size(95, 37), 31 .BackColor = Color.DarkGreen, 32 .ForeColor = Color.White, 33 .Font = New System.Drawing.Font("MS ゴシック", 24), 34 .Location = New Point(Width, Hight), 35 .Text = "T_" & idx.ToString 36 } 37 '- コントロールの追加 38 Me.Pnl_Test.Controls.Add(d) 39 '- Index +1 40 idx += 1 41 Next 42
ラベルって何のラベルですか?
開発環境は書けないのでしょうか?
実際にアプリの時間がかかることが問題で、そこがボトルネックなのですか?
ラベルの種類と開発環境の記載漏れ、大変失礼いたしました。
動的生成しているラベルですが、標準で存在するForms.Labelとなります。
開発環境はVisual Studio 2017 です。
質問のラベル生成以外にもTextBox等の動的生成を行う為、
少しでも処理を軽くできる箇所がないかご質問致しました。
処理を軽くしたいのなら、現在どの程度の時間がかかっているのかを計測するなりして、それと比較した目標値を提示してはどうか。
また、質問文では「少しでも処理が軽くなるようにしたい」と書きながら、コメントでは「少しでもメモリの使用率を抑えたく」と述べているが、どっちを主眼において質問しているのかわからない。(メモリを潤沢に使って処理を軽くする方法はどうなの、とか)
ご指摘ありがとうございます。
「処理を軽くしたい」が主題となります。
混乱させてしまい大変申し訳ございません。
追記の内容を修正します。
まずは動的に生成する必要が本当にあるのかといったところだと思います。
事前に作って表示を切り替えるだけにするとか、そもそも使いまわせるのかなど考慮した結果が生成するなんですかね?
WinForms アプリの Label コントロールということで良いのですよね? Core ではなくて .NET Framework ということで良いのですか? そのバージョンを書いてください。ここは「質問への追記・修正の依頼」の場所なので、初期画面では閉じているので見ない人もいますので、追加情報は質問欄を編集して追記願います。
>>YAmaGNZさん
動的に生成することの可否ですが、
質問内容に動的生成する経緯を追加いたします。
ご指摘ありがとうございます。
時間がかかることの対応や使用メモリの削減が目的ではないようですが、なのに「処理を軽く」とはどういうことでしょう? 処理時間やメモリ消費に特に問題なく、今のコードで期待通り動いているなら、余計なことはしないのが良いと思うのですが。
>>SurferOnWwwさん
.NET Frameworkになります。
質問内容に環境を追記いたします。
ご指摘ありがとうございます!
単純に軽くしたいってふわっと言われても困るんですが。
現在どこでどの程度時間掛かってるけど、このくらいにしたいとか具体的な目標値みたいなのは無いんですか?そもそも、どこで処理時間掛かってるかとか時間きちんと測りました?
追記の説明を読む限りではMaxの数を最初に作っておいて、表示・非表示の切り替えだけでいけそうに思えます。
>>YAmagGNZさん
ご指摘の通り、表示数の可変はあれど、
最大値は15で固定なので初回に作っておけば、都度作る必要はなくVisibleのTrueとFalseで
問題ないと気づきました。。。
ご指摘ありがとうございます!
コントロール多いときの一番の処理のボトルネックって描画処理になると思うんですが、あの回答で本当に解決したんですか?(15くらいだと、どのみち問題になるほどの速度じゃないだろうけど)
結局「軽くしたい」ってのは何だったんだ?という疑問だけが残った。
実際は特に問題が発生してるでもなく、ソースレビューして欲しいだけとかそんな感じなのかな。
謎の高速退会
もっとスマートにコーディングする方法はないのかと聞いてもらうと話が早かったと思いますけど・・・
お久しぶりとか書いて顕示欲がある割にあっさり退会してしまうのか…。
回答1件
あなたの回答
tips
プレビュー