6

.NET で何かをすばやく描画するのに問題があります。特に時間がかかるとは思いませんが、試したすべてのマシンで深刻な問題が発生します。これは、C# を使用して vs2008 .NET に実装されています (C++ のものもありますが、図面には関係ありません)。

私には 3 つの画面があり、ユーザーは遅延なく画面を切り替えることができるはずです。最初の画面には、4 つのボタン、2 つのボタンとそれぞれ 6 つのラベルで構成される 8 つのユーザー コントロール、テキスト フィールド、およびドロップダウン ボックスがあります。そこまでとは思えません。

2 番目の画面には、4 つのラベル、6 つのボタン、6 つのボタンを持つ 2 つのコントロール、1 つの opengl 描画コンテキスト、およびそれぞれ約 10 個のラベルがあります。

3 番目の画面には、1 つの OpenGL コンテキストと 10 個のボタンがあります。

任意の画面から任意の画面への切り替えには、文字通り約 1 秒かかります。たとえば、2 番目の画面から最初の画面に切り替えると、アプリケーション全体が空白になり、背景画面が表示されてから、最初の画面が描画されます。多くの場合、画面は断片的に描かれます。まるで機械がスウェーデンの工場で繊細でおいしい文字を意図的に手作りし、1 つずつ画面に出荷しているかのようです。私は誇張していますが、スウェーデン人がこの再描画ほど遅いとは思わないので、それを明確にしたいと思います.

1 番目と 2 番目の画面はメモリに描画され、そこに保存されます。表示と非表示を切り替えるには、'.Hide()' と '.Show()' だけを使用します。ダブルバッファリングは問題ではないようです。3 番目の画面は毎回新たに描画され、1 番目と 2 番目の画面と同じ時間がかかるように見えます。

何かご意見は?何が起こっているのでしょうか?どうすれば追跡できますか?

ありがとう!

編集:C++処理などは独自のスレッドで行われることを追加する必要があります。操作の結果を画面に描画するための MethodInvoke がときどきありますが、この問題は、関数を呼び出すことなく、ボタンを押してある画面から次の画面に移動するだけで発生します。

4

4 に答える 4

1

どうすればそれを追跡できますか?

dotTrace- http: //www.jetbrains.com/profiler/

于 2009-01-09T01:17:02.203 に答える
1

言及されたプロファイラーに加えて、OpenGL コンテキストをオフにすることもできます。スピードアップに気付いた場合は、それがグラフィックスの問題であることがわかり、それに応じて最適化に集中できます。

スウェーデンのユーモアに与えられるポイント。

于 2009-01-09T00:51:02.193 に答える
0

私自身、そのような方法で OpenGL を使用したことはありませんが、OpenGL コンテキストが反転する方法を確認することをお勧めします。あるページから別のページに切り替えると、(DirectX 用語で) デバイスがリセットされ、遅延が発生する可能性があります。

可能であれば、デバイスを System.Drawing.Bitmap の背面に描画し、そのビットマップを画面で使用します。OpenGL コードで、ユーザーが現在表示しているページを認識できるようにすると、求めている速度が向上する可能性があります。

大きな変更を加える前にこれをテストするには、フォーム上の OpenGL ディスプレイを削除してみてください。

これはすべて気まぐれです。

于 2009-01-09T06:51:14.447 に答える
0

「画面反転」イベント中に他の処理を行っていますか? フォームを再描画させる以外に?フリップの間に何かを処理していて (おそらく c++ の追加でしょうか?)、マルチスレッドを使用していない場合、そのホワイト アウト効果が得られます。フォームはおそらく、CPU 時間がそれ自体を再描画するのを待っています。

于 2009-01-08T23:41:32.830 に答える