1

C#(フォーム)で記述されたアプリケーションは、しばらくすると速度が低下します(特に、スリープモードから復帰した後だけでなく、30分ほど経過した後も)。

アプリケーションの構造は次のとおりです。

ここに画像の説明を入力してください

ボタン1またはボタン2を押すと、メインパネルが変わります。ボタン2をクリックすると、サブメニューとサブパネルが実際のパネルに表示されます。

ここに画像の説明を入力してください

興味深いことに、アプリはパネル1とパネル2を切り替えるのに非常に長い時間しか必要としません(つまり、ボタン1またはボタン2が押された場合)。ボタン2が押されてパネルがロードされると、サブパネル間の切り替え(ボタン2a、2b、および2cが押された場合)が高速になります。

Davin Tryonがこの投稿への回答で示唆したように、>長時間実行されるアプリケーションの速度が低下します<CPU、メモリ、ディスク、およびネットワークを確認しました。

ここに画像の説明を入力してください

しかし、これらの値は私には高くないようです...

編集03/23/136:11pm: DasKrümelmosterがボタン/パネル1とボタン/パネル2の間の切り替えコードを要求しました。

activePanel.Hide();
activePanel = getPanelFromSelectedMenuElement(selectedMenuElement); // would return "panel2";

サブパネルを切り替えるときも基本的に同じです。

4

4 に答える 4

0

Red Gate Antzプロファイラー)http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/)を使用して、メモリなどの問題をチェックできます。14日間の猶予があります。評価期間も。

また、アプリケーションに対してWindowsパフォーマンスカウンターを使用することも検討してください:http://www.codeproject.com/Articles/8590/An-Introduction-To-Performance-Counters

于 2013-03-23T16:58:56.567 に答える
0

これは、C#、winforms、またはアプリケーションとは無関係である可能性があります。他のアプリケーションで必要だったため、Windowsはアプリケーションのメモリをディスクに部分的にスワップする場合があります。長い遅延の後にアプリケーションの一部にアクセスすると、スワップされたメモリがディスクからロードバックされ、時間がかかる場合があります。

于 2013-03-23T16:59:26.300 に答える
0

あなたの質問には、人々が答えるのに十分な情報が含まれていない可能性があります。

いくつかの重要なことがあります:

  1. メインパネルにコントロールを追加するアプローチは何ですか

  2. メインパネルに追加された子コントロールを破棄しましたか?そしてどうやって?

  3. あなたのコードの非常に少ない情報によると

    activePanel.Hide();
    activePanel = getPanelFromSelectedMenuElement(selectedMenuElement);
    

    次回getPanelFromSelectedMenuElementは、以前に非表示にしたパネルの同じインスタンスを返しますか?そうでない場合は、参照されていないパネルを破棄しましたか?

  4. コントロールの管理のコードレベルの階層は何ですか?

あなたはあなたが役に立つ答えを得ることができる人々にこの情報を提供する必要があるでしょう。または、デザインを確認するだけで原因を見つけることができるかもしれません。

これらがすべて問題なく、CPUの負荷、メモリ使用量、ページスワッピング、ディスクアクセス、ネットワークフローが原因ではない場合。あなたが言及しなかった唯一のことは、グラフィックカードのパフォーマンスです。

于 2013-03-23T23:17:42.287 に答える
0

実行時にオンデマンドでコントロールを作成する場合: コントロールの作成は遅くなりますが、非表示/表示は十分に高速です。待ち時間は目立たないのでアプリの起動にずらして、起動時に全て作成しても良いでしょう。

実行時にページを表示せずにページを設計するのに役立つこのコントロールを参照してください: https://stackoverflow.com/a/6954785/1974021

于 2013-03-23T17:04:24.400 に答える