2010-12-10 27 views
0

在我的WPF應用程序中,我們有各種自定義控件,這些控件中的依賴項屬性使用各種屬性,如SortOrder,MaxLength等;這些屬性值在PropertyGrid控制中用於標識特定屬性的排序順序等。自定義屬性沒有被垃圾收集?

使用螞蟻探查器我知道這些屬性對象總是保留在內存中,即使原始的自定義控件不再在內存中。探查顯示了這些屬性在此保留圖形 - http://weblogs.asp.net/blogs/akjoshi/CustomAttributeRetentionGraph.png

alt text

我不知道爲什麼發生這種情況的任何線索?

回答

2

Attribute與類型相關聯而不是類型的實例。

每當一個類型被加載,所有屬性將被加載與該類型相關聯。對於一個類型來說,這隻會發生一次,這意味着如果您創建了100個該類型的實例,那麼屬性將只加載一次。

我想他們留在內存中,直到應用程序退出。

+0

有關屬性(DP)的屬性(具有屬性範圍)如何?我可以看到每個新對象都創建了新的實例。 – akjoshi 2010-12-10 10:52:06

+1

「屬性」和「字段」是「類型」的一部分。它們每個類型也加載一次。 – decyclone 2010-12-10 10:54:28

+0

好吧,我說我將一個屬性與300個屬性關聯起來,然後即使在控制被銷燬之後,該屬性的300個對象也會留在內存中(一旦創建了對象)。 – akjoshi 2010-12-10 11:00:43