2010-12-10 8 views
0

、これらのコントロールで依存関係プロパティはSortOrderMaxLengthなどのようなさまざまな属性を使用します;これらの属性値は、特定のプロパティの並べ替え順序などを識別するためにPropertyGrid制御に使用されています。カスタム属性はガベージコレクションされませんか?私たちは、さまざまなカスタムコントロールを持っている私のWPFアプリケーションで

ANTSプロファイラを使用して、元のカスタムコントロールがメモリに残っていなくても、これらの属性オブジェクトは常にメモリに残っていることがわかりました。プロファイラは、これらの属性については、この保持グラフを示している - http://weblogs.asp.net/blogs/akjoshi/CustomAttributeRetentionGraph.png

alt text

これは任意のリードが起こっている理由は、私がわかりませんか?

答えて

2

Attributeがタイプとしないタイプのインスタンスに関連付けられています。タイプがロードされるたび

、すべての属性は、そのタイプに関連付けられているロードされます。これは1つの型に対して1回だけ発生します。つまり、その型のインスタンスを100個作成すると、属性は1回だけロードされます。

私は、彼らは、アプリケーションが終了するまでメモリにとどまると思います。

+0

プロパティ(DP)に関連付けられた属性(プロパティスコープを持つ)はどうですか?新しいオブジェクトごとに新しいインスタンスが作成されているのがわかります。 – akjoshi

+1

'Properties'と' Fields'は 'Type'の一部です。また、1種類につき1回読み込まれます。 – decyclone

+0

だから、属性を300のプロパティに関連付けると、この属性の300個のオブジェクトは、コントロールが破棄された後でも(オブジェクトが作成されると)メモリに残ります。 – akjoshi

関連する問題