3

C# を使用して、.NET フレームワークで Windows アプリケーションを作成しています。これらのアプリケーションの起動時間を短縮するにはどうすればよいですか? アプリケーションの起動時と初期化時に、特に初期フォームを表示するときに、非常に遅く感じます。

私のアプリケーションは Access (MDB) データベースと連携してデータを保存します。一部のフォームではデータをロードしますが、アプリケーションが特定のフォームを初めて表示するときは、表示に時間がかかります。

NGen を使用して起動時間を短縮しようとしましたが、期待どおりにはなりませんでした。

4

6 に答える 6

10

アプリケーションが起動時にできる限り少ない作業を行うようにしてください。

スタートアップ コードを変更して、スタートアップ タスクをセカンダリ スレッドに延期できます。

より詳細な回答をしたいと思いますが、あなたの質問は非常に広範であり、十分に詳細ではありません。

于 2010-01-15T16:25:38.723 に答える
3

遅延読み込みを調べてください。これには、クラスがインスタンス化されたときではなく、データが最初に要求されたときに、データをロードしてクラスを設定することが含まれます。

// member variable
        private DataSet _employeeDataSet = null;

    // property
    public DataSet EmployeeDataSet
    {
        get
        {
            if (_employeeDataSet == null)
                _employeeDataSet = GetEmployeeDataSet();

            return _employeeDataSet;
        }
    }
于 2010-01-15T16:44:54.660 に答える
3

まず、この起動期間中に実行されている機能を診断し、各機能が消費している起動遅延を分析する必要があります...

次に、そのうちの 1 つまたは 2 つが多くの時間を消費しており、最初に表示された UI 画面に関与していないことがわかったら、それらの関数を別のスレッドで実行します。

于 2010-01-15T16:36:10.653 に答える
1

私は C# で .NET アプリケーションを構築しているチームに所属していますが、常にこの問題に遭遇します。プロファイラーがありますが、1) ちょっと面倒だし、2) 出力がわかりにくいので、誰もわざわざ使いません。私がやっていることは、IDE の下でそれを開始することです。それは非常に遅いですが、一時停止して、コール スタックを調べて、何をしているのか、なぜなのかを尋ねます。

予定よりも遅くなっているのは、削除されるか、別の方法で行われるいくつかのことを行っているためです。これらは通常、次のようなものを要求する関数呼び出しで構成されています。必要。これらはすべてミッドスタックの関数/メソッド呼び出しの形をとっており、それらが複数のスタック サンプルに現れると、注意を喚起するだけです。

これらの問題を予見し、入れないようにするのは良いことですが、最善の意図にもかかわらず、そのような問題が忍び寄ることを期待できます。スタック サンプリング (スタックショット)の方法は、それらを見つけるのに効果的です。

于 2010-01-15T20:35:27.753 に答える
1

EQATEC Profilerを使用してアプリケーションのプロファイリングを行い、どの関数呼び出しに時間がかかるかを確認することができます。バックグラウンドで何が起こっているのか、どこを改善できるのかを視覚化するのが少し簡単になります。

于 2010-01-15T16:42:32.403 に答える
0

この MSDN の記事には、特に .NET 2.0 アプリに役立つヒントがたくさんあります。

私が学んだ最も有益なことは、親フォームを呼び出すだけでは十分ではないということです。多くの子オブジェクト (ツリー、または私の場合は Infragistics ToolbarManagers) を含む子コントロールをSuspendLayout() / ResumeLayout()呼び出す必要がある場合があります。ToolbarManager で使用すると、起動時間が 3 秒短縮されましたBeginUpdate() / EndUpdate()Begin / EndUpdate

于 2011-11-16T08:30:54.423 に答える