1

アプリに動的に追加しているコントロールを破棄したい。ガベージコレクターは.Remove()、親コントロールからオブジェクトを取得した後、オブジェクトを取得していません。また、巨大なビットマップとジオメトリのプライベートメンバーがあります。

私はこのようなことをしたいです:

foreach (ScrollItem mylabel in canvas1.Children)
{
    if (mylabel.bRemove == true)
    {
        canvas1.Children.Remove(mylabel);
        mylabel = null;  // or mylabel.Dispose();
    }
}

canvas1にnullアイテムを含めることがUIObjectCollectionできないため、nullに設定できません。また、それだけRemove()ではガベージコレクターはそれを収集しません。

私は次のようなことをしようとしました:

myobj = mylabel;
canvas1.Children.Remove(mylabel);
myobj = null;

しかし、それも機能しません。

4

1 に答える 1

4

オブジェクトへの参照がない限り、GCはそれを収集します。オブジェクトへの追加の参照がないかアプリを確認してください。これは通常、イベントサブスクライバーである可能性があります。.NETメモリプロファイラーを使用して、オブジェクトがGCされるのを妨げている原因を確認することもできます。

于 2012-08-13T08:52:22.040 に答える