1

我是 WinDBG 的新手。我正在寻找内存泄漏的原因,并且就我目前的知识而言,我已经掌握了。

我的 MVVM 应用程序正在泄漏MyLovelyView对象。

在 WinDBG 中,我运行!dumpheap -type MyLovelyView并获得以下信息:

Address       MT     Size
05f2a978 0bc948d4       12     
05f39638 04d51114       36     
05f398d4 04d27734       96     
05f7db28 04d51114       36     
05f7dd70 04d27734       96     
05fc48f4 04d51114       36     
05fc4b3c 04d27734       96     
total 0 objects
Statistics:
      MT    Count    TotalSize Class Name
0bc948d4        1           12 MyNamespace.Unity.ProviderUnityExtension+FactoryStrategy+Provider`1[[IMyLovelyViewModel, MyNamespace]]
04d51114        3          108 MyNamespace.MyLovelyViewModel
04d27734        3          288 MyNamespace.MyLovelyView
Total 7 objects

我知道我现在不应该MyLovelyView在内存中有任何对象,并且我已经强制 GC 运行多次以确保它们不只是闲逛。

所以我使用命令检查根!gcroot 05f7dd70,结果如下:

Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
Scan Thread 5 OSTHread 3428
Scan Thread 19 OSTHread 36a0
Scan Thread 20 OSTHread 1280
Scan Thread 23 OSTHread 2e90
Scan Thread 24 OSTHread 3738
Scan Thread 27 OSTHread 2398
DOMAIN(04936520):HANDLE(Pinned):44f12f8:Root:  066e4260(System.Object[])->
  056f946c(System.Collections.Generic.List`1[[System.Object, mscorlib]])->
  05ed1920(System.Object[])->
  05f8891c(ThirdParty.Control.DiagramPanel)->
  05f7e1e8(ThirdParty.Control.Diagram)->
  05f7f79c(System.Windows.DataContextChangedEventHandler)->
  05f7f748(System.Windows.Data.BindingExpression)->
  05f7db28(MyNamespace.MyLovelyViewModel)->
  05f7dd70(MyNamespace.MyLovelyView)

我试图使用第三方控件重现泄漏,这是一个简单的虚拟应用程序,到目前为止,一直没有成功。

在这一点上,我被困住了。有更多调试经验的人知道我的下一步应该是什么吗?

有关其他信息,查看 XAML 中的内容可能会有所帮助MyLovelyView

<Grid x:Name="LayoutRoot" Background="White">
    <Control:Diagram SomeProperty="{Binding SomeBoundProperty}" />
</Grid>

谢谢,

更新:如果我从 XAML(上图)中删除绑定,则!gcroot输出如下所示:

Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
Scan Thread 5 OSTHread 36b4
Scan Thread 20 OSTHread 17c0
Scan Thread 21 OSTHread 3300
Scan Thread 22 OSTHread 3570
Scan Thread 23 OSTHread 2968
Scan Thread 26 OSTHread 2934
Scan Thread 27 OSTHread 34d8
DOMAIN(04DA8FE8):HANDLE(Pinned):37812f8:Root:  07324260(System.Object[])->
  0633946c(System.Collections.Generic.List`1[[System.Object, mscorlib]])->
  06a72860(System.Object[])->
  06b3823c(ThirdParty.Control.DiagramPanel)->
  06b2d8f8(ThirdParty.Control.Diagram)->
  06b2f568(System.Windows.Controls.Grid)->
  06b2d67c(MyNamespace.MyLovelyView)->
  06b2d7f0(System.Windows.DataContextChangedEventHandler)->
  06b2d79c(System.Windows.Data.BindingExpression)->
  06b2d434(MyNamespace.MyLovelyViewModel)

(所有内存地址都已更改,因为这是重新运行)

4

0 回答 0