[英]Memory leaks in WPF/C#
请注意,这是在WPF/C#
完成的,而不是在.net2.0
Winforms
我有一个ListBox,其中包含类似于Class X
对象。 类X包含一个显示在列表框中的BitmapSource
对象,因此它显示类似于[Image] [Text]
这是通过使用CreateBitmapSourceFromHBitmap
加载的 - 请注意我调用DeleteHBitmap
来删除此调用期间DeleteHBitmap
的HBitmap
,众所周知,这是我在google / etc上看到的帖子所做的
我有一个树在每个TreeViewItem
包含所述ListBox
- 通常树加载了几个项目。 用户可以将这些图像拖放到不同的TreeViewItem中。 要处理这些操作,我手动调用操作:
<code>
ItemCollection.RemoveAt
</code>
<code>
ItemCollection.Insert
</code>
从ListBox项集合中move
图像,注意我插入时创建一个新的Class X
对象以插入ListBox
项集合
我注意到,在5-10分钟的一致拖放空间中,我多次调用此类操作会得到一致的内存泄漏。
我的问题是:
我是否正确处理了BitmapSource
的移动? 有什么我正在做的事情导致图像不能完全从ItemCollection
删除?
或者有什么根本我错过了?
哪个是保存图像的变量的定义ClassX ??? 问题可能在于您正在创建一个新的ClassX,并且旧的没有被GC删除,因为头部有两个不同的ClassX实例。
由于您使用的是非托管代码(CreateBitmapSourceFromHBitmap),您应该检查是否正确调用了所有finalize方法(尽管可能是close或dispose),并且没有可以指向ClassX的静态引用。
请记住,如果未删除ClassX,则可以在GC生成的图形中访问Bitmap实例,使其不会将其从堆中删除。
我建议使用perfmon并添加.Net内存对象,以查看是否有任何对象在finalize或pinned对象中存活,那些是您可能对内存泄漏感兴趣的对象。
我希望它有所帮助:P,但如果你把ClassX的代码放进去会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.