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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.67907 の関連記事表示

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

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

    言語=VB2008

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

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

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

    フォームが開く時間を短縮させるよい方法がありましたら、アドバイスをお願い申し上げます。
親記事 /過去ログ115より / 関連記事表示
削除チェック/

■67909  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ kiku -(2013/09/09(Mon) 17:27:28)
    No67907 (コニー さん) に返信
    > 言語=VB2008
    > 画像の読込自体はフォームが開いてからでもいい(遅延してもいい)のですが、

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

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

    メインウィンドウで良いのであるならば、下記が参考になると思います。
    ttp://dobon.net/vb/dotnet/form/splashwindow.html
記事No.67907 のレス /過去ログ115より / 関連記事表示
削除チェック/

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

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


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

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


     まぁ、あれだ。
    PictureBox に、デザイナーでファイルを指定しているのでしょう。
    そうすると、フォームのコンストラクタで直列にファイルを読み込みます。
    なので、フォームのインスタンスを作る部分が遅くなります。
    どうにかするには、フォームのインスタンスの生成が済んで、表示が済んで、
    アプリケーションがアイドル状態になったときに、読み込みをはじめます。
    ここで、並列にやれば、ちょっとは速くなる、かも。
    ディスクへのアクセスが(同じディスクなら)直列なので、ここがボトルネックになる。
記事No.67907 のレス /過去ログ115より / 関連記事表示
削除チェック/

■67919  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ PANG2 -(2013/09/10(Tue) 09:52:48)
    > 画像の読込自体はフォームが開いてからでもいい(遅延してもいい)のですが、
    > 各ユーザーコントロールのサイズをあらかじめ元の画像サイズの値を用いて計算し、
    > フォームが開いた時点で各コントロールのサイズが固定されている状態にしておきたいので、
    > あらかじめ画像サイズ情報を取得しておきたいのです。

    画像サイズを高速に取得する方法です。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/597fastloadimg/fastloadimg.html
記事No.67907 のレス /過去ログ115より / 関連記事表示
削除チェック/

■67920  Re[1]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ shu -(2013/09/10(Tue) 11:01:23)
    No67907 (コニー さん) に返信

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

    http://sadoyama.sakura.ne.jp/world/htm/note/002_00_getimgsize.htm
記事No.67907 のレス /過去ログ115より / 関連記事表示
削除チェック/

■67934  Re[2]: PictureBoxをたくさん並べたフォームの開く時間短縮
□投稿者/ コニー -(2013/09/11(Wed) 09:11:08)
    みなさま、コメントありがとうございます。
    PANG2 さんが教えてくれた方法が、今回は非常に参考になりそうなので、
    こちらをもう少し調べてみようと思います。
    ありがとうございました。
記事No.67907 のレス / END /過去ログ115より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -