C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: PictureBoxをたくさん並べたフォームの開く時間短縮


(過去ログ 115 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■67907 / inTopicNo.1)  PictureBoxをたくさん並べたフォームの開く時間短縮
  
□投稿者/ コニー (1回)-(2013/09/09(Mon) 16:28:51)

分類:[VB.NET/VB2005 以降] 

言語=VB2008

Windowsフォーム上で複数のPictureBoxを縦に並べるような画面を作っています。
具体的には、PictureBoxとLabelを配置したユーザーコントロールを用意し、
フォーム上のFlowLayoutPanelにこのユーザーコントロールを配置しています。
フォームのコンストラクタで渡した情報を元にユーザーコントロールを配置し、
各ユーザーコントロールで画像ファイルを読み込み、PictureBoxに表示しています。

ただ、画像の数(=PictureBoxの数=ユーザーコントロールの数)が多くなると
(例えば数十個以上)、このフォームが起動するのに結構時間がかかります。
ボトルネックとなるのは画像ファイルをBitmapに読み込む時なのでしょうか?

画像の読込自体はフォームが開いてからでもいい(遅延してもいい)のですが、
各ユーザーコントロールのサイズをあらかじめ元の画像サイズの値を用いて計算し、
フォームが開いた時点で各コントロールのサイズが固定されている状態にしておきたいので、
あらかじめ画像サイズ情報を取得しておきたいのです。

フォームが開く時間を短縮させるよい方法がありましたら、アドバイスをお願い申し上げます。
引用返信 編集キー/
■67909 / inTopicNo.2)  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ kiku (20回)-(2013/09/09(Mon) 17:27:28)
No67907 (コニー さん) に返信
> 言語=VB2008
> 画像の読込自体はフォームが開いてからでもいい(遅延してもいい)のですが、

上記の部分の要件が良く理解できませんでした。

例えば、アプリ起動時にスプラッシュウィンドウが表示され、
メインウィンドウの準備ができたら、スプラッシュウィンドウが
自動的に閉じるという動作でも、要件に合致していますでしょうか?

メインウィンドウで良いのであるならば、下記が参考になると思います。
ttp://dobon.net/vb/dotnet/form/splashwindow.html

引用返信 編集キー/
■67911 / inTopicNo.3)  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ Jitta (74回)-(2013/09/09(Mon) 21:13:52)
Jitta さんの Web サイト
No67907 (コニー さん) に返信
>
> ただ、画像の数(=PictureBoxの数=ユーザーコントロールの数)が多くなると
> (例えば数十個以上)、このフォームが起動するのに結構時間がかかります。
> ボトルネックとなるのは画像ファイルをBitmapに読み込む時なのでしょうか?

 そういうときは、計測します。.designer ファイルにコードがあります。


> 画像の読込自体はフォームが開いてからでもいい(遅延してもいい)のですが、
> 各ユーザーコントロールのサイズをあらかじめ元の画像サイズの値を用いて計算し、
> フォームが開いた時点で各コントロールのサイズが固定されている状態にしておきたいので、
> あらかじめ画像サイズ情報を取得しておきたいのです。
>
> フォームが開く時間を短縮させるよい方法がありましたら、アドバイスをお願い申し上げます。

 「フォームが開く」というのは、どういうことでしょうか。
プログラムが実行されると、エントリー メソッドでフォームのインスタンスが生成されます。
インスタンスの生成後、表示されます。
まず、時間がかかっているところを特定しましょう。
その後、その箇所を、どこに移動できるか、検討します。


 まぁ、あれだ。
PictureBox に、デザイナーでファイルを指定しているのでしょう。
そうすると、フォームのコンストラクタで直列にファイルを読み込みます。
なので、フォームのインスタンスを作る部分が遅くなります。
どうにかするには、フォームのインスタンスの生成が済んで、表示が済んで、
アプリケーションがアイドル状態になったときに、読み込みをはじめます。
ここで、並列にやれば、ちょっとは速くなる、かも。
ディスクへのアクセスが(同じディスクなら)直列なので、ここがボトルネックになる。
引用返信 編集キー/
■67919 / inTopicNo.4)  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ PANG2 (1回)-(2013/09/10(Tue) 09:52:48)
> 画像の読込自体はフォームが開いてからでもいい(遅延してもいい)のですが、
> 各ユーザーコントロールのサイズをあらかじめ元の画像サイズの値を用いて計算し、
> フォームが開いた時点で各コントロールのサイズが固定されている状態にしておきたいので、
> あらかじめ画像サイズ情報を取得しておきたいのです。

画像サイズを高速に取得する方法です。
http://www.atmarkit.co.jp/fdotnet/dotnettips/597fastloadimg/fastloadimg.html
引用返信 編集キー/
■67920 / inTopicNo.5)  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ shu (389回)-(2013/09/10(Tue) 11:01:23)
No67907 (コニー さん) に返信

Delphiですが以下のサイトに画像ファイルからサイズ情報だけ取得する方法
について書かれています。コードは解析しなくても各ファイルのフォーマットについて
記述されているのでその辺を応用されるとよいかと思います。

http://sadoyama.sakura.ne.jp/world/htm/note/002_00_getimgsize.htm
引用返信 編集キー/
■67934 / inTopicNo.6)  Re[2]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ コニー (2回)-(2013/09/11(Wed) 09:11:08)
みなさま、コメントありがとうございます。
PANG2 さんが教えてくれた方法が、今回は非常に参考になりそうなので、
こちらをもう少し調べてみようと思います。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -