- PR -

フォームのOpacityを半透明に設定すると動作が極端に遅くなる

投稿者投稿内容
しんご
会議室デビュー日: 2006/05/28
投稿数: 3
投稿日時: 2006-05-28 02:03
初めて投稿させて頂きます。

現在、VS2003にてWinFormアプリの開発を行っているのですが、
フォームのOpacityを半透明(1.0より小さく)に設定すると、
その後のフォームの移動やリサイズの動作が極端に遅くなることがあり、
困っています。

グラフィックの透過処理などに時間を要するものだと思うので、
マシンスペックが低かったり、フォームのウィンドウサイズが
大きかったりした場合、ある程度の速度低下は覚悟しているのですが、
予想以上に遅くなっているような印象です。

また、とても疑問に感じることが2点あります。
1つは、VSを立ち上げて、VSからCtrl+F5などでデバッグなし実行した場合は、
それほど遅さは感じられないのですが、VSを終了し、上記と同じexeを
ダブルクリックで実行させた場合は、極端に動作が遅くなることです。
もう1つは、極端に遅くなったあと、ウィンドウをリサイズしたり、
移動したりしていると、急にに動作が普通に戻ることがあるのです。

同じような経験をお持ちの方はいらっしゃいませんか?
これは一体どういったことによるものなのでしょうか?
有効な回避方法などあるのでしょうか?

ご存知の方がいらっしゃいましたら、教えてください。
よろしくお願いいたします。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-28 08:51
引用:

しんごさんの書き込み (2006-05-28 02:03) より:

また、とても疑問に感じることが2点あります。
1つは、VSを立ち上げて、VSからCtrl+F5などでデバッグなし実行した場合は、
それほど遅さは感じられないのですが、VSを終了し、上記と同じexeを
ダブルクリックで実行させた場合は、極端に動作が遅くなることです。


これは起動方法というよりは、起動後のウィンドウの下にある「背景」の問題ではないでしょうか?

引用:

もう1つは、極端に遅くなったあと、ウィンドウをリサイズしたり、
移動したりしていると、急にに動作が普通に戻ることがあるのです。


これは、途中の描画をサボっているんじゃないでしょうか。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-28 09:27
違うマシンで試してみたらどうなりますか?

OSの設定によっても変わるかもしれませんし。
パフォーマンスの設定や画面のプロパティの内容なども考慮して試してみると何かヒントがつかめるかもしれませんね。

実際に Opacity の値によってのみで、そのような現象が生じるのでしたら、できることと言えば、使用を諦めるか細工してしのぐことになるかと思います。
しんご
会議室デビュー日: 2006/05/28
投稿数: 3
投稿日時: 2006-05-28 10:21
じゃんぬねっとさん、コメント頂きまして、ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2006-05-28 08:51) より:

これは起動方法というよりは、起動後のウィンドウの下にある「背景」の問題ではないでしょうか?


試してみましたが、背景を同じ条件にしても、VSから起動した場合と単独起動した
場合では、やはり、動作速度に大きな差がでるようでした。
やっていて気づいたのですが、「VSから起動」というよりは、「VSでそのexeの
ソリューションを開いた状態にしておいて起動する」という表現の方が正しいよう
です。その場合は、exeダブルクリックで起動しても、動作はスムーズな状態と
なります。
かなり想像なのですが、VS起動による.NET Frameworkのロード処理が、
exe単独起動時のそれとは何かが異なっているとか、そういった根本的な問題
なのかなーと思っております。

引用:

これは、途中の描画をサボっているんじゃないでしょうか。


これは動かしいるexeの描画処理のことでしょうか?
こちらで問題確認用にすごく単純なテストプログラム(C#でWinFormのスケルトン
を作成し、プロパティでOpacityを50%に設定しただけのプログラム)でも、
本問題の発生を確認しています。
ですので、特に複雑な描画ロジックが組み込まれたようなexeでの話ではないのですが。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-28 10:25
関係ないとおもうけれど参考までに
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3986&forum=7&5
しんご
会議室デビュー日: 2006/05/28
投稿数: 3
投稿日時: 2006-05-28 10:30
田中さん、コメントありがとうございます。

引用:

R・田中一郎さんの書き込み (2006-05-28 09:27) より:
違うマシンで試してみたらどうなりますか?


私の動作環境については以下となります。
・OS : Windows XP SP2
・CPU : Intel Celeron M360 1.40GHz
・メモリ: 512MB
・グラフィック: チップセット内臓

あまり他のマシン環境で試していないのですが、
おっしゃる通り、環境依存の可能性も高いのかもしれません。

引用:

OSの設定によっても変わるかもしれませんし。
パフォーマンスの設定や画面のプロパティの内容なども考慮して試してみると何かヒントがつかめるかもしれませんね。


アドバイスありがとうございます。
設定をいろいろ変えて、試してみようと思います。


sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-05-28 11:26
こんにちは

http://www.atmarkit.co.jp/fdotnet/dotnettips/410vshost/vshost.html

VS2005を試してみたところでは、
デバッグなし実行でもvhhost化で実行しているようです。
上記からの推測にすぎませんが、
VS2003でも裏ではなんらかの処理が動いているかもしれません。

参考までに。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-28 13:08
引用:

しんごさんの書き込み (2006-05-28 10:21) より:

かなり想像なのですが、VS起動による.NET Frameworkのロード処理が、exe単独起動時のそれとは何かが異なっているとか、そういった根本的な問題なのかなーと思っております。


まあ、IDE からの起動と言えども、アセンブリを作ってから起動しているに過ぎない、
直接起動した場合とで、起動されたプログラムが変わることはあり得ないので、
あるとすれば、"IDE が起動しているから" という解釈の方が正しいと思います。

とはいえ、私の環境だと再現できないですね。(どちらにしても重い...)

引用:

これは動かしいるexeの描画処理のことでしょうか?
こちらで問題確認用にすごく単純なテストプログラム(C#でWinFormのスケルトン
を作成し、プロパティでOpacityを50%に設定しただけのプログラム)でも、本問題の発生を確認しています。
ですので、特に複雑な描画ロジックが組み込まれたようなexeでの話ではないのですが。


いえ、たとえば激しく動かせば途中の描画を当然サボります。
これは、.NET Framework 側というよりは、OS 側の都合です。

ということが言いたかったのですが、
これは最初の件に関連して "極端に遅くなったあと" と仰られているようですね。(;~_~)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)