2016-12-31 10 views
2

私はasp net 4.5を使用しています。デストラクタを実装/コード内で処理する

Marker.aspxページとコードの後ろにMarker.aspx.csというマークがあります。 ポストバックが発生したときはいつも、コードバックでPage_Load関数が実行され、GeoMarkupクラスが作成されます。ポストバックが、私はデストラクタデストラクタ内でこの行を発射して貼り付ける必要があります実装されているときはいつでも

GeoMarkup markupManager;  
    protected void Page_Load(object sender, EventArgs e) 
    { 
     markupManager = new GeoMarkup("constans", 
             "mapName", 
             null); 

    } 

markupManager.Dispose(); 

を私の質問はどのように私は背後にあるコードでデストラクタを実装することができますです?;

+4

代わりに 'Page_Unload'を使うべきだと思います。*ページが完全にレンダリングされ、クライアントに送信され、破棄される準備ができたら、Unloadイベントが発生します。この時点で、ResponseやRequestなどのページプロパティはアンロードされ、クリーンアップが実行されます。*ページがクライアントに送信されると、必要なすべてのリソースをクリーンアップすることが安全です。 – MarcinJuraszek

+0

ガベージコレクタを使用できませんか?あなたのコードを非難する可能性のあるいくつかのケースのためにdisposeを実装しないことを強くお勧めします。それでもなお良くないわけではないが、同等のものはガベージコレクタを呼び出すことができます。 – Media

答えて

0

コードビハインドクラスは、メソッドを持つPageのサブクラスです。彼らはもはや、現在のHTTP要求の処理のために必要でないとき

あなたがクラスに廃棄を呼び出します

public override void Dispose() 
{ 
    if (markupManager != null) { 
     markupManager.Dispose(); 
     markupManager = null; 
    } 
} 

HTTPパイプラインの後ろにコード内でそのメソッドをオーバーライドする必要があります。

関連する問題