2011-01-19 1 views
2

私のアプリケーションへのメインインターフェイスは適度に大きいです。 Outlookのスケジュール制御を持っています。そして、およそ40の.NETベースコントロール。WinForms UIユーザーコントロール内にあるときにUIの読み込みが非常に遅くなります

これをすべてフォームに入れると、読み込みが高速になり、すべてが素晴らしいように見えます。

私は最近、ユーザーコントロールにすべてのこれらのコントロールを移動し、その後、反射によって、私はディスクからアセンブリをロードし、(コントロール)にキャストし、私のForm_Loadで私は、次の呼び出し:

this.Controls.Add(myUserCtrl); 

すべてをユーザーコントロールに移すことで、2〜3秒のロード時間から15〜20秒のロード時間になりました。私はまだ同じ量のコントロールをロードしています。

誰でもコントロールをUserControlに移動すると、このような恐ろしい負荷のパフォーマンスが得られるのですか?

私は、サスペンド/レジュームレイアウト機能を呼び出すことを含め、すべてを試しました。

+0

デバッガで一時停止すると、どこがハングしますか? – SLaks

+0

@Slaks - 削除された投稿のあなたのコメントは正しいことが判明しました。私は理論をテストするためのアプリケーションを作成し、証拠はあなたのコメントをサポートします。ありがとうございました! – David

+1

タイトルに「C#.NET WinForms」を入れないでください。それらをタグに残す。 –

答えて

6

コードをからコンストラクタに移動します。

Form_Loadでは、コントロールのハンドルが既に作成されているため、すべての更新で実際のウィンドウハンドルを更新するためのネイティブ呼び出しが必要です。
これは、実行中の作業によっては遅くなることがあります。

コードをコンストラクタに移動すると、ハンドルが作成される前にすべてを初期化できます。

コードによっては、必ずしも良いことはありません。

+1

ありがとうSLaks ...信じられない、すべての私の問題を解決しました:-) – mvcNewbie

+0

また、通知は、On_Paint()からコンストラクタへのものを移動しています。同様に動作します。私のuserControlのローディングは、約3-4秒から約0.5秒にまで減少しました。確かにupvoted。 :) – C4u

関連する問題