使用JetBrains dotMemory,我在WPF的ToolTipService中追踪了内存泄漏。此语法没有内存泄漏:
<Button ToolTipService.ToolTip="Hello World" />
另一方面,这种语法会导致内存泄漏:
<Button>
<ToolTipService.ToolTip>
<ToolTip Content="Hello World" />
</ToolTipService.ToolTip>
</Button>
对于那些熟悉dotMemory的人来说,这里的保留图表显示工具提示是将视图模型保留在内存中的唯一方法。
奇怪语法的原因是我使用的是继承自ToolTip的HeaderedToolTip类。除了ToolTip的内容之外,它还有一个Header属性,并以粗体显示Header。这个内存泄漏与该控件无关,但正如你所看到的,这只是一个工具提示。
我也尝试将工具提示定义为静态资源,所以我可以这样做:
<Button ToolTipService.ToolTip="{StaticResource HelloWorldToolTip}" />
但这也将它留在记忆中。
之前有没有人见过这个,或者有没有人对如何使用自定义模板显示工具提示有任何想法,这不会导致内存泄漏?可以这样:
<Button ToolTipService.ToolTip="Hello World" />
真的是WPF使用工具提示而不引入潜在内存泄漏的唯一方法吗?