2

この質問はすでに聞かれていることは知っていますが、私の質問は私が見た他の質問よりも一般的です。

Formsでのコントロールの使用、およびコマンド(コマンド、リーダーなど)の使用をプログラムでチェックインしているときにDB、次の質問がありました。

コントロールを持っている場合、Disposeそれを使用した後にそれを使用すべきではありませんか?

そうすれば、プログラムが必要なリソースのみを使用していることを確認できます。また、既に破棄されているコントロールを使用する必要がある場合は、再度ロードするだけです。

常にすべてを処分しない理由があるのか​​もしれませんが、それが私がこの質問をしている理由です。

ご回答いただきありがとうございます。

4

4 に答える 4

7

作成した非ビジュアル コンポーネント (コマンド、リーダー、I/O コンポーネント、基本的に を実装するものIDisposable) は、使用が終わったら破棄する必要があります。

ビジュアル コントロールの場合、FormDispose関数はそのコレクション内のすべてのコントロールを自動的に破棄する必要があるため、何らかの理由 Controlsでフォームから削除したコントロールについてのみ心配する必要があります。Controls

重大なメモリの問題が発生していない限り、フォーム コントロールを手動で破棄しようとするのは、おそらくマイクロ最適化です。

于 2012-09-05T13:30:56.283 に答える
4

はい、具体的な理由がない場合は、おそらくすべてを処分する必要があります。Formaおよび が破棄されると、コントロールは自動的に破棄Formされます。

UI リソースを破棄しないことは、それほど有害ではありません。メモリが必要以上にシステム リソースを使用しているだけです。ほとんどの場合、これは機能上の問題ではありません。

もちろん、これはデータベース接続やファイルとは対照的です! それらを処分することは非常に重要です。

于 2012-09-05T13:31:20.900 に答える
0

アンマネージド リソースを使用している場合は、はい。IDisposableを実装して、using を使用すると作業が簡素化されます。しかし、あなたの質問に関しては、常にではありません。コントロール (UI コントロール) は既にこの IDisposable を実装しており、閉じるときにその親によって呼び出されます。

于 2012-09-05T13:31:23.577 に答える
0

はい、そうすべきです。Windows フォーム ウィンドウ (またはコンテナー内) では、フォーム デザイナーがそれを行います。

protected override void Dispose(bool disposing)
{
    if(disposing && (components != null))
    {
        components.Dispose();
    }
    base.Dispose(disposing);
}
于 2012-09-05T13:32:24.837 に答える