5

アプリの表面には多くのコントロールがあり、さらに多くのコントロールが実行時に動的に追加されます。

タブを使用して表示されるコントロールの数を制限していますが、ダブルバッファリングも行っていますが、再描画 (サイズ変更、最大化など) する必要がある場合は、ちらつきやスタッターが発生します。

WinForms アプリのパフォーマンスを改善するためのヒントとコツは何ですか?

4

4 に答える 4

4

できることを 2 つ知っていますが、すべての状況に常に当てはまるとは限りません。

  1. フロー レイアウト パネルまたはテーブル レイアウト パネルを使用するのではなく、各コントロール (myNewlyCreatedButton.Location.X/Y) に絶対配置を使用すると、パフォーマンスが向上します。WinForms は、コントロールをどこに配置する必要があるかを把握するために必要な計算を大幅に減らす必要があります。

  2. 多くのコントロールを追加/削除/変更する単一の操作がある場合は、影響を受けるコントロールのコンテナー (パネルまたはフォーム全体) で "SuspendLayout()" を呼び出します。同じパネルで作業呼び出し「ResumeLayout()」をやり直します。そうしないと、フォームはコントロールを追加/削除/変更するたびにレイアウト パスを実行する必要があり、より多くの時間がかかります。参照: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout(VS.80).aspx

ただし、ウィンドウのサイズを変更するときにこれらのアプローチがどのように適用されるかはわかりません。

于 2008-09-04T23:00:44.690 に答える
3

他のいくつかのヒントよりも一般的ですが、ここに私のものがあります:

多数の「アイテム」を使用する場合は、コントロールを再利用するのではなく、アイテムごとにコントロールを作成しないようにしてください。たとえば、それぞれがボタンに対応する 10,000 個の項目がある場合、(プログラムで) 10,000 個のボタンを作成し、それらのイベント ハンドラーを接続するのは非常に簡単です。あなたは取り組まなければなりません。ただし、たとえば 500 個のボタンを作成し (一度に 500 個のボタンしか画面に表示されないことがわかっているため)、ボタンと項目の間に「マッピング レイヤー」を導入すると、はるかに効率的です。ユーザーが何かを行うたびに、ボタンを別のアイテムに再割り当てします。その結果、表示されるはずのボタンのセットが変更されます (たとえば、スクロールバーを移動するなど)。

于 2008-09-05T05:44:26.420 に答える
2

ただし、ウィンドウのサイズを変更するときにこれらのアプローチをどのように適用できるかはわかりません。

ResizeBeginイベントとResizeEndイベントを処理して、SuspendLayout()とResumeLayout()を呼び出します。これらのイベントは、System.Windows.Formクラスにのみ存在します(ただし、Controlにも存在することを望みます)。

于 2008-09-04T23:08:15.590 に答える
1

と をうまく活用しSuspendLayout()ていResumeLayout()ますか?

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout(VS.80).aspx

于 2008-09-04T22:57:43.557 に答える