質問編集履歴
3
ソースコードの追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,13 +12,14 @@
|
|
12
12
|
Me.bihin = New System.Windows.Forms.PictureBox(10, 10) {}
|
13
13
|
Dim img As Image
|
14
14
|
Dim fs As FileStream
|
15
|
+
Dim adress(10, 10) As String
|
15
16
|
'Stopwatchオブジェクトを作成する
|
16
17
|
Dim sw As New System.Diagnostics.Stopwatch()
|
17
18
|
'ストップウォッチを開始する
|
18
19
|
sw.Start()
|
19
20
|
for i = 0 to 10
|
20
21
|
for i = 0 to 10
|
21
|
-
'DBからファイルパスを取得する
|
22
|
+
'DBからファイルパスを取得する。
|
22
23
|
adress(i, j) = command.ExecuteScalar()
|
23
24
|
Next
|
24
25
|
Next
|
@@ -34,6 +35,7 @@
|
|
34
35
|
|
35
36
|
for i = 0 to 10
|
36
37
|
for i = 0 to 10
|
38
|
+
'取得したファイルパスから描画を行う。
|
37
39
|
Me.bihin(i, j) = New System.Windows.Forms.PictureBox()
|
38
40
|
fs = File.OpenRead(sResult)
|
39
41
|
img = Image.FromStream(fs, False, False)
|
2
計測したコードについて追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
お世話になっております。私の周りにVB.netを使える人はあまりおらず、ネット検索やこのサイトに助けてもらいながらやっているものです。どうしても、一人では詰んでしまうので、助言やヒントだけでも頂けたらと思っています。
|
2
2
|
すでに一応完成しているアプリの動作で一度に多数の画像描画を行うイベントがあります。
|
3
3
|
以下のソースコードのようにして、New句でpictureboxのインスタンスを複数個作っています。
|
4
|
-
しかし、この動作が少々重く、5秒くらいかかっています。
|
4
|
+
しかし、この動作が少々重く、5秒くらいかかっています。
|
5
|
+
(レイアウトオブジェクトを生成するコードについては割愛します。)
|
5
6
|
|
6
|
-
|
7
7
|
```vb.net
|
8
8
|
Public Class tanakakudai
|
9
9
|
Private bihin(,) As System.Windows.Forms.PictureBox
|
@@ -12,10 +12,28 @@
|
|
12
12
|
Me.bihin = New System.Windows.Forms.PictureBox(10, 10) {}
|
13
13
|
Dim img As Image
|
14
14
|
Dim fs As FileStream
|
15
|
+
'Stopwatchオブジェクトを作成する
|
16
|
+
Dim sw As New System.Diagnostics.Stopwatch()
|
17
|
+
'ストップウォッチを開始する
|
18
|
+
sw.Start()
|
19
|
+
for i = 0 to 10
|
20
|
+
for i = 0 to 10
|
21
|
+
'DBからファイルパスを取得する
|
22
|
+
adress(i, j) = command.ExecuteScalar()
|
23
|
+
Next
|
24
|
+
Next
|
25
|
+
|
26
|
+
'ストップウォッチを止める
|
27
|
+
sw.Stop()
|
28
|
+
'結果を表示する
|
29
|
+
Console.WriteLine("DBからの読み取り時間は")
|
30
|
+
Console.WriteLine(sw.Elapsed)
|
31
|
+
'ストップウォッチをリセットしてから再開する
|
32
|
+
sw.Reset()
|
33
|
+
sw.Start()
|
34
|
+
|
15
35
|
for i = 0 to 10
|
16
36
|
for i = 0 to 10
|
17
|
-
'DBで画像のアドレスを持ってくる
|
18
|
-
|
19
37
|
Me.bihin(i, j) = New System.Windows.Forms.PictureBox()
|
20
38
|
fs = File.OpenRead(sResult)
|
21
39
|
img = Image.FromStream(fs, False, False)
|
@@ -23,6 +41,11 @@
|
|
23
41
|
Me.Controls.Add(bihin(i, j))
|
24
42
|
Next
|
25
43
|
Next
|
44
|
+
'ストップウォッチを止める
|
45
|
+
sw.Stop()
|
46
|
+
'結果を表示する
|
47
|
+
Console.WriteLine("描画にかかる時間は")
|
48
|
+
Console.WriteLine(sw.Elapsed)
|
26
49
|
End Class
|
27
50
|
```
|
28
51
|
|
@@ -34,7 +57,7 @@
|
|
34
57
|
|
35
58
|
〇追記
|
36
59
|
前回の質問の時から、計測をするように回答してくださっていた方、ご忠告に従わず失礼しました。
|
37
|
-
|
60
|
+
YAmaGNZさんの回答への返信でも書きましたが、重い腰を上げて計測を行った結果を以下に報告します。
|
38
61
|
1. その他レイアウトオブジェクトの生成など: 0.00257s
|
39
62
|
2. DBから画像ファイルパスなどの読み出し:0.0129663s
|
40
63
|
3. 画像ファイルパスからimageプロパティに変換してpictureboxに描画:0.0069787s
|
1
計測したデータを追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,4 +29,18 @@
|
|
29
29
|
違う質問で、ある方に、画像を読み込むのではなく、Bitmapクラスを読み込んでクラスメンバとして保持するクラスを用意しておけば、EXE起動時にすべての画像を読み込んでおけば画像の読み込みは一回で済み、ある程度速くなるのではないかとも紹介されています。
|
30
30
|
その方法をぜひやってみたいと思いますが、クラスメンバに保持するのはどのようにすればよいのでしょうか。
|
31
31
|
なんとなくイメージはできるのですが、実際に参考になるソースコードが分からず、、困っています。
|
32
|
-
参考にできるサイトの紹介とかだけでもいいので、宜しくお願い致します。
|
32
|
+
参考にできるサイトの紹介とかだけでもいいので、宜しくお願い致します。
|
33
|
+
|
34
|
+
|
35
|
+
〇追記
|
36
|
+
前回の質問の時から、計測をするように回答してくださっていた方、ご忠告に従わず失礼しました。
|
37
|
+
YAmagaGNZさんの回答への返信でも書きましたが、重い腰を上げて計測を行った結果を以下に報告します。
|
38
|
+
1. その他レイアウトオブジェクトの生成など: 0.00257s
|
39
|
+
2. DBから画像ファイルパスなどの読み出し:0.0129663s
|
40
|
+
3. 画像ファイルパスからimageプロパティに変換してpictureboxに描画:0.0069787s
|
41
|
+
4. loadイベント全体でかかった時間: 0.0217302s
|
42
|
+
以上の結果でした。
|
43
|
+
これは割と性能のいいノートPCで行っているため、処理が速いですが、実際にこのアプリ用に使っている
|
44
|
+
タブレット端末は中古品で性能も悪く、5秒くらいかかってしまっています。
|
45
|
+
やはり、Bitmapクラスを読み込んでクラスメンバとして保持するクラスを用意していおいて全ての画像を読み込んでおけば項番2,3の動作が速くなると思います。(DBからファイルパスを持ってきて、imageプロパティに変換するというのを全部EXE起動時にやっておいた方が速くなると思います。)
|
46
|
+
なので、もっと速くする余地はありそうなので、これらのプログラム修正を行っていきたいと思います。
|