2009-08-27 5 views
4

レンダリングに計算コストの高いグラフィックスを使用するWindowsアプリケーションでは、通常スクロールがどのように処理されますか? I音の波形グラフを描画していた場合、例えば、peakfileから波形を処理した後、Iべき:Windowsアプリケーションのスクロールバッファリング

  • は、その後、メモリ内GDI面に全体のグラフィカル表現をレンダリングし、そしてスクロール可能なコントロールをレンダリングエリアの開始/終了を変更するだけですか?

  • 波の可視部分のみをレンダリングします。別のスレッドでは、表示されるグラフの新しいチャンクを処理します。

  • 波の可視部分とバッファーをレンダリングします。このようにして、波形の「空白」または「現在のレンダリング」部分がユーザに見える可能性は少なくなります。それでもユーザーがすばやく離れた場所にスクロールすると、レンダリングが完了するまでセクション全体が空白になります。

問題は、多くのアプリケーションがこれをさまざまな方法で処理することです。例えば

は、Adobe Acrobatは - ページがキャッシュ内にある場合を除き、スクロール中に空白のページをレンダリングします。ドキュメントのレンダリング領域内に表示されるページは、別のスレッドでレンダリングされ、oponの完了が示されます。

Microsoft Word - 基本的に上記と同じです。ドキュメントは別々のページに分かれているため、必要に応じて各ページが処理/レンダリングされ、キャッシュに追加されます。

Internet Explorer - 不明です。 「ウェブページ」全体がグラフィックメモリにレンダリングされているように見えますが、消費するグラフィックデータの数にかかわらずグラフィックメモリに表示されます。理論的には、10または15画面の長さのためにスクロールするWebページでは、これは50〜60MB相当のグラフィックメモリ消費を意味する可能性があります。 WebKitやFireFoxの経験がある人は、レンダリングエンジンが大量のメモリを消費するかどうかを説明したり、メモリを節約するためにページのペイシズを「オンザフライ」でレンダリングしようとしますか?

私のアプリケーションは、C#、.NET 3.5、およびWinFormsに基づいています。

答えて

1

これは、複雑さとユーザーエクスペリエンスとのトレードオフです。 3つ目の選択肢は、あなたに最高のユーザー体験を提供します(彼らはすぐに物事を見て、仕事を始めることができます)。また、コード化するのが最も複雑です(開発に最も時間がかかり、多くのバグがあります)。

"正しい"解決策は、 "高価な"高価な方法、およびユーザーベースの要求に依存します。

複雑ではありませんが、それ以上の複雑さはないようにしてください。

1

これは実際にはメモリ使用量対プロセッサ使用量のトレードオフだと思います。最初の選択肢(適切な大きさのキャンバスに波全体をレンダリングし、可視ウィンドウ部分のみを表示してそのキャンバスを動かす)は、十分なメモリがあると仮定すると、最良のアプローチかもしれません。最初のレンダリングの遅延後、ユーザーエクスペリエンスはスムーズかつシームレスになります。

このために十分なメモリがない場合は、表示中の部分をすぐにレンダリングする必要があります。このアプリケーション(WAVデータビューア)は何度も書かれていますが、通常、GDI +はWAVデータの一部(大部分)をリアルタイムで(30fpsを超える高いフレームレートで完全に滑らかなアニメーションを生成する) 。しかし、これの鍵は、各サンプル値を別々の点としてレンダリングすることではありません。あなたがしたいことは、X軸上の各ピクセルについて、WAVサンプルの対応する塊をスキャンして最小値と最大値を取得し、これらの値の間に1行を表示します。

関連する問題