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

わんくま同盟

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

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


(過去ログ 25 を表示中)
■11352 / )  Re[6]: ListViewのちらつき、仮想化について
□投稿者/ NyaRuRu (25回)-(2007/12/12(Wed) 16:58:39)
2007/12/12(Wed) 17:19:17 編集(投稿者)
2007/12/12(Wed) 17:15:36 編集(投稿者)
2007/12/12(Wed) 17:05:02 編集(投稿者)

No11346 (れい さん) に返信
>
> 私の環境(Vista)ではありがちなダブルバッファしただけで全くちらつきませんよ。

Vista (というか DWM) はティアリング回避のために GDI 描画を横取りし,オフスクリーンサーフェイスを介したデスクトップ描画を行っています.
DWM 管理下では,垂直同期のタイミングでしかデスクトップは更新されません.
例えば GDI で 1 秒間に 100 回の描画を行ったとしても,画面更新回数は垂直同期 (最近の液晶ディスプレイであれば 60 Hz 等) に制限されます.
Windows XP で起きていたような,一秒間に非常に多数の画面更新がおきるようなちらつきは,DWM 管理下では原理上起きないのです.(もちろん,WPF や HTML であっても DWM 管理下で無ければこの手のちらつきは起き得るわけですが)

という感じに様々な様々なレイヤーの特性が絡んでくる現象なので,特定の Win32 コントロールをダブルバッファ描画しただけで解決というほど事態は単純ではない,というのが私の意見です.

Direct3D の排他モード (フルスクリーンモード) みたいな,限られた状況であればアドバイスしやすいんですけどね.

>「ちらつき」の定義の問題でしょうか?

確かに,何故ちらついているか,どのようにちらついているかは最初に確認した方が良いのかもしれませんね.
一方これはジレンマでもあって,何故ちらついているかという原理が分かる程度にメカニズムを把握できていれば,そもそも自分であちこち弄って解決できてしまう,あるいはどうしようもない問題だと判断できてしまう,と.
今から Win32 の描画メカニズムを本腰を入れて学ぶコストと,HTML / WPF / Vista の普及ペースを考えれば,とりあえず諦めて放置というのもありかなぁと思う次第だったりします.

返信 編集キー/


管理者用

- Child Tree -