- - PR -
VB2005の画面描画速度の改善策は?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-05-19 09:55
VB2005の画面の描画速度が遅い事はもう、
十分わかっているのですが、 (ただ、顧客要求はとどまる所を知らない・・・。) 遅いにしても、表示された画面で、テキストボックス等が 画面上でバラバラと描画される過程が見えるものどうかと思います。 とにかく、画面コントロールだけ配置した時点で パラパラ漫画ですから、もうどうにも対処方法が思いつきません。 昔、VBがコンパイラでなく遅かった時代には、 最初に画面をロードしておいて、使うときに Visible=true にして ごまかした時代を記憶していますが、 .Netではそのような卑屈な対処方法は無いのでしょうか? 画面の起動に時間がかかる事までは、UI等の工夫で対処可能ですが 画面描画のパラパラ漫画だけは、お客は納得しないと思われます。 なにか情報でも頂けると幸いです。 宜しくお願いいたします。 | ||||
|
投稿日時: 2008-05-19 11:07
画面の起動に時間がかかるにしても
パラパラ漫画の様に出た経験はないですね。 画面コントロールの作成は画面のロード処理等で 動的に作成されているのでしょうか? 動的に行われているなら
である程度は描画を制御できます。 (ResumeLayoutを呼び出した時にいっせいに画面に配置される) デザイナで作成した画面がパラパラ漫画のようになるなら コントロール数を減らすか、マシンのパワーを上げるしか 手がないと思います。 | ||||
|
投稿日時: 2008-05-19 19:30
あるにはあると思いますよ。 たとえば、Windows メッセージの描画関係のものを一端止めてしまうようなフラグを実験で実装したことが書いたことがありますが、パラパラにならず最後に一気に表示されるようにはなりました。 ただし処理時間は変わりませんでした。 (ので、実験はそこで終了しました) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-05-19 19:32
本当にただの描画の問題だと思いますので、レイアウト ロジックを止めても変わらないと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-05-19 19:53
私も Visual C# 2005/2008 でアプリケーションを作っていて、バラバラ(パラパラ)と描画されるのが気になっています。 ただ、これが気になるのは、描画時間がかかるというよりも、描画のしかたがバラバラと描画されるため、という面のほうが大きいような感じがします。実際に何秒、何ミリ秒、かかっていますか。私の場合は、1秒はかからないと思います。また、CPU使用率を見ても、描画自体にCPUパワーは使っていないような感じがします。 バラバラ表示されるのは、描画の最適化の手法がそういう描画のしかたなんだろうと思いますが、この描画方法を替えることができれば体感速度は速くなると考えます。たとえば、無地の状態があって、その1秒後に全部のコントロールが描画済みの状態で一度に登場すれば、そんなに遅いとは感じないだろうと思います。 ただの思いつきですが、ダミーでなにかコンポーネントをフォーム全体に被せておいて、描画が終わった頃に外す、ということを試すと面白いかも、と思いました。どなたかやってみませんか? | ||||
|
投稿日時: 2008-05-19 19:57
(勇気があればですが、)一応は、「パラパラのなにが不満だ?」と聞いてみたほうが良いかもしれません。パラパラだから、なにか内部で重いことをしていると推測していて、プログラムの出来が悪いと思っていて、それが不満なのかもしれません。 パラパラは、見栄えがそうなるだけであり、別にCPUパワーを食っているわけでもない、.NET で開発したアプリケーションのデフォルトの動作はそういうものです、と説得してみてはどうでしょうか。(勇気があればですが) | ||||
|
投稿日時: 2008-05-21 06:40
本当にただの描画の問題だと思います。
例えば、真新しい画面を作成して、 コントロールを大量追加(テキストボックス100個配置程度でわかるかな?) してそのまま単純表示させれば、パラパラ漫画です。 ちなみに、全てのコントロールの Visible=false にして、 その後で、一度に Visible=true にしても同じ状況になりますね。 特に起動直後は、.NETの実行環境から起動始めるので、 なおさら顕著になります。 何とか対処方法は無いのでしょうか? 下手すれば、C++で作り直しなんて事もあるかもです。(冗談抜きで) | ||||
|
投稿日時: 2008-05-21 06:44
unibonさん
>ダミーでなにかコンポーネントをフォーム全体に被せておいて、描画が終わった頃に外す それ自分も思い着いていました。ただ、まだ試して無いですね。 ただ絶望するより、やって見たいと思います。 |