C# Wpf RadDocking内存泄漏

C# Wpf RadDocking内存泄漏,c#,wpf,memory-leaks,telerik,C#,Wpf,Memory Leaks,Telerik,我当时正在跟踪一个与事件处理程序相关的内存泄漏问题,而我发现每次打开raddoCking然后关闭它时,都会有大约500kb的内存被使用而没有释放。 我使用的是MVVM模式,据我所知,它与MVVM库无关 当我关闭一个RadPane时,我将它的上下文设置为null,这还不够吗? 谢谢几点: 将RadPane的上下文设置为null是不够的。您应该取消订阅任何持久对象的任何事件订阅,并为所有一次性对象调用Dispose 你如何测量记忆力?关闭RadPane后,它不会立即释放内存。垃圾收集仅在需要时发生。

我当时正在跟踪一个与事件处理程序相关的内存泄漏问题,而我发现每次打开raddoCking然后关闭它时,都会有大约500kb的内存被使用而没有释放。 我使用的是MVVM模式,据我所知,它与MVVM库无关

当我关闭一个RadPane时,我将它的上下文设置为null,这还不够吗? 谢谢

几点:

  • 将RadPane的上下文设置为null是不够的。您应该取消订阅任何持久对象的任何事件订阅,并为所有一次性对象调用Dispose

  • 你如何测量记忆力?关闭RadPane后,它不会立即释放内存。垃圾收集仅在需要时发生。如果您想测试内存使用情况,应该在测试之前调用GC collect和finalization

    GC.Collect()

    GC.WaitForPendingFinalizers()

  • 但是,如果您想准确地跟踪内存泄漏,则需要使用适当的分析工具,该工具将显示不断增长的对象及其保留图


    请看一下这篇文章,以获得一个好的内存分析器。

    您需要调用RadPane的RemoveFromParent()方法,以便对其进行垃圾收集

    请查看以下链接:


    我使用了jetbrains的点内存。。它告诉我,大约500kb是在snapshots@advapi:我猜,它在拍摄快照之前会执行完整的垃圾收集。它是否向您显示了正在生长的对象?你有没有处理过我上面提到的所有一次性物品?你是否在每次打开/关闭时都能持续体验到这种记忆增长?你好,我已经按照你说的做了。。每次打开或关闭RadPane时,我都会看到内存增长…顺便说一句,我已经检查并正确调用RemoveFromPanel并将内容设置为null@advapi:如果要测试内存泄漏,应该能够找到哪个实例正在增长,哪个实例持有引用。这类问题很难猜测和解决。我建议你试试蚂蚁记忆分析器。它有一个试用期,对你来说已经足够了。看看这个答案