【问题标题】:Custom attributes not getting garbage collected?自定义属性没有被垃圾收集?
【发布时间】:2010-12-10 09:14:54
【问题描述】:

在我的 WPF 应用程序中,我们有各种自定义控件,这些控件中的依赖属性使用各种属性,如 SortOrderMaxLength 等;这些属性值在PropertyGrid 控件中用于识别特定属性的排序顺序等。

使用 ANTS 分析器,我了解到这些属性对象始终保留在内存中,即使原来的自定义控件不再在内存中。 Profiler 显示这些属性的保留图 - http://weblogs.asp.net/blogs/akjoshi/CustomAttributeRetentionGraph.png

我不确定为什么会发生这种情况?

【问题讨论】:

    标签: c# wpf memory-management attributes garbage-collection


    【解决方案1】:

    Attribute 与类型相关联,而不是类型的实例。

    无论何时加载一个类型,都会加载与该类型关联的所有属性。这对于一个类型只会发生一次,这意味着如果你创建了 100 个该类型的实例,属性只会被加载一次。

    我猜它们会一直留在内存中,直到应用程序退出。

    【讨论】:

    • 与属性(DP)关联的属性(具有属性范围)怎么样?我可以看到每个新对象都在创建新实例。
    • PropertiesFieldsType 的一部分。它们也为每种类型加载一次。
    • 好的,假设我将一个属性与 300 个属性相关联,那么即使在控制被销毁后,该属性的 300 个对象也会保留在内存中(一旦对象被创建)。
    猜你喜欢
    • 1970-01-01
    • 2013-10-18
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多