C# 将视图绑定到ViewModel时WPF中的工具提示内存泄漏
我在C# 将视图绑定到ViewModel时WPF中的工具提示内存泄漏,c#,wpf,mvvm,memory-leaks,tooltip,C#,Wpf,Mvvm,Memory Leaks,Tooltip,我在WPF,MVVM中有一个应用程序。在列表框中显示图像的列表,每个图像都与不同的会话相关联 我的ListBoxItemTemplate如下所示 <ListBox.ItemTemplate> <DataTemplate> <Image Source="{Binding IsClaims,Converter={StaticResource PolicyClaimsImageSelector}}" ToolT
WPF
,MVVM
中有一个应用程序。在列表框中显示图像的列表
,每个图像都与不同的会话相关联
我的ListBox
ItemTemplate
如下所示
<ListBox.ItemTemplate>
<DataTemplate>
<Image
Source="{Binding IsClaims,Converter={StaticResource PolicyClaimsImageSelector}}"
ToolTipService.ShowDuration="7000">
<Image.ToolTip>
<StackPanel>
<TextBlock Text="{Binding WorkingSessionName}" />
<Views:ToolTipView DataContext="{Binding ThisViewModel}"/>
</StackPanel>
</Image.ToolTip>
</Image>
</DataTemplate>
</ListBox.ItemTemplate>
当工具提示出现内存泄漏时,不理解其发生的原因,
我的问题是,在显示工具提示后,是否需要对工具提示进行任何处理以处置内存?。如果是这样,怎么做?
编辑
没有订阅任何活动。仅绑定不同视图的不同视图模型的数据上下文
ToolTipView.XAML
<DockPanel>
<xcad:DockingManager DockPanel.Dock="Left" Grid.Row="2" BorderBrush="Black" BorderThickness="1">
<xcad:DockingManager.Theme>
<xcad:MetroTheme />
</xcad:DockingManager.Theme>
<xcad:LayoutRoot >
<xcad:LayoutPanel Orientation="Horizontal" >
<xcad:LayoutAnchorablePaneGroup Orientation="Horizontal" DockMinWidth="150" >
<xcad:LayoutAnchorablePane >
<xcad:LayoutAnchorable Title="Folder" x:Name="ExplorerView" AutoHideWidth="300">
<Views:ExplorerView DataContext="{Binding ExplorerViewModel}"/>
</xcad:LayoutAnchorable>
</xcad:LayoutAnchorablePane>
</xcad:LayoutAnchorablePaneGroup>
<xcad:LayoutAnchorablePaneGroup Orientation="Horizontal" DockMinWidth="450" >
<xcad:LayoutAnchorablePane >
<xcad:LayoutAnchorable Title="Documents" x:Name="TOC">
<Views:TableOfContentView DataContext="{Binding TableOfContentViewModel}"/>
</xcad:LayoutAnchorable>
</xcad:LayoutAnchorablePane>
</xcad:LayoutAnchorablePaneGroup>
<xcad:LayoutAnchorablePaneGroup Orientation="Vertical" DockMinWidth="320">
<xcad:LayoutAnchorablePane DockMinHeight="400" >
<xcad:LayoutAnchorable Title="Properties" x:Name="Property">
<Views:PropertyView DataContext="{Binding PropertyViewModel}"/>
</xcad:LayoutAnchorable>
</xcad:LayoutAnchorablePane>
<xcad:LayoutAnchorablePane >
<xcad:LayoutAnchorable Title="Search" x:Name="Search">
<Views:SearchPanel DataContext="{Binding SearchViewModel}"/>
</xcad:LayoutAnchorable>
</xcad:LayoutAnchorablePane>
</xcad:LayoutAnchorablePaneGroup>
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
</DockPanel>
这有点像是暗中捅了一刀,但也许可以尝试一下。我遇到过一个问题,某些图形驱动程序可能会以某种方式触发WPF中的漏洞。我们最终导致WPF禁用硬件加速并重新测试。这不是一个理想的答案,但足以让我们为长期运行客户端的客户解决这个问题
在注册表中(系统范围内)
或通过应用程序本身的代码:
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
您可以使用“WPF性能套件”测试通过软件或硬件渲染的内容,并为软件渲染元素启用紫色色调
我希望这会有所帮助。我已经通过创建一个模拟实际绑定的接口修复了它。见下文
public IExplorer ToolTipExplorerViewModel
{
get { return ExplorerViewModel; }
}
public ITableOfContents ToolTipTableOFContents
{
get { return TableOfContentViewModel; }
}
现在,我使用ToolTipView ie绑定此属性:
<Views:ExplorerView DataContext="{Binding ToolTipExplorerViewModel}" Grid.Column="0"/>
<Views:TableOfContentView DataContext="{Binding ToolTipTableOFContents}" Grid.Column="1" />
现在,当我们更改工具提示时,内存不会增加。如何确定存在泄漏?你对此持肯定态度吗?我正在VS2015中调试该应用程序,它有一个内置工具诊断工具,当我鼠标悬停
每张图像时,它会显示内存提升,正如工具提示
当时所显示的那样。@AbinMathew将鼠标悬停事件提升1000000次,如果内存消耗增加,请查看。你可能没有内存泄漏你在ToolTipView中做什么?若您正在订阅ThisViewModel的任何事件,那个么您将泄漏yes。请把密码寄出去ToolTipView@atomaras在问题中添加了查看代码。ViewModels中没有订阅的事件,只有属性和命令。
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
public IExplorer ToolTipExplorerViewModel
{
get { return ExplorerViewModel; }
}
public ITableOfContents ToolTipTableOFContents
{
get { return TableOfContentViewModel; }
}
<Views:ExplorerView DataContext="{Binding ToolTipExplorerViewModel}" Grid.Column="0"/>
<Views:TableOfContentView DataContext="{Binding ToolTipTableOFContents}" Grid.Column="1" />