3

機能ごとにグループに分けられたやや大きなアプリケーションに取り組んでいます。すべての機能はほとんど独立しているため (すべて同じデータベースを使用しますが、異なる機能間で直接相互作用することはありません)、ユーザー定義コントロールを使用し、それらを個別の「アプリケーション」として扱っています。アプリケーションの仕組みは次のとおりです。

  • 「ルート」アプリケーションには、メイン メニューと 2 つのパネルのみが含まれます。メイン メニューは、機能のグループを選択するために使用されます。
  • グループが選択されると (アプリケーションの起動時に最初のグループが自動的に選択されます)、そのグループの機能 (ボタンで表される) が最初のパネルに表示されます。
  • ユーザーが必要な機能を (適切なボタンをクリックして) 選択すると、「フォーム」を含むユーザー コントロールが 2 番目のパネルに表示されます。すべてのユーザー コントロールを表示するコードは次のようになります。

        panel2.Controls.Clear();
        UserControl1 uc1 = new UserControl1();
        uc1.Location = new Point(0, 0);
        panel2.Controls.Add(uc1);
        label6.Text = "User control 1";
    

そのため、ユーザーが機能の 1 つを選択すると、アプリケーションは既存のコントロールをクリアし、選択したコントロールを表示します。アプリケーションは正常に動作します (これまでに実装した部分)。これが私の質問です。このアプローチは、主にメモリなどのコンピューター リソースをどのように管理するのでしょうか。具体的には、ユーザーがある機能を使用してから別の機能に切り替えた場合、.NET のサービスは以前の機能で使用されていたメモリを解放し (ガベージ コレクターがそれを担当していると思います)、私が使用する SQL 接続を解放しますか?データベースと通信し、閉じますか? また、他に注意すべき点はありますか? 前述したように、機能は適切に動作しますが、アプリケーション全体の完全なテストにはまだほど遠いです (作成時にすべての機能を個別にテストするだけです。作成したコンピューターでのみ実行されるため、適切なテストとは見なされません)。そのため、アプリを長時間継続して使用すると、アプリのパフォーマンスが低下するのではないかと心配しています。VS 2010 (C#) と SQL Server 2005 を使用してこのアプリケーションを作成しています。何か提案があれば、それらを書いてください。この質問により、リソース管理が不十分なため、テストと実装の段階になると、アプリケーションの大規模な再構築を防止しようとしています。ありがとう。何か提案があれば、それらを書いてください。この質問により、リソース管理が不十分なため、テストと実装の段階になると、アプリケーションの大規模な再構築を防止しようとしています。ありがとう。何か提案があれば、それらを書いてください。この質問により、リソース管理が不十分なため、テストと実装の段階になると、アプリケーションの大規模な再構築を防止しようとしています。ありがとう。

4

2 に答える 2

1

ガベージコレクタは、どこにも参照されていないオブジェクトに属するメモリを解放する役割を果たします。Windowsフォームのフォームに一度に多くのコントロールが表示される場合、それらはすべてその時点でフォームによって参照されているため、GCはここで何もクリーンアップしません。これらのコントロールにあまりにも多くのオブジェクトをロードしないように注意する必要があります。Disposeさらに、を呼び出す前にコントロールを適切に実行しないと、メモリの問題が発生する可能性がありますpanel2.Controls.Clean()

于 2012-10-30T09:56:34.937 に答える
0

こんなアプリも作っています。私が経験しているのは、コントロールの管理に関しては多くの困難です ( stackoverflow に関するこちらの質問を参照してください)。

私の期待は、アプリケーションが使用するメモリが大量になる可能性があるということです。これを防ぐには、不要になったコントロールを閉じる必要があります。また、SQL との接続については、手動で開閉することをお勧めします。これにより、後で競合が発生しないことを確認できます。

于 2012-10-30T09:48:50.373 に答える